break||(
code that cannot contain non paired closing bracket
)
Chociaż goto
rozwiązanie jest dobrą opcją, nie będzie działać w nawiasach kwadratowych (łącznie z poleceniami FOR i IF), ale tak będzie. Chociaż powinieneś uważać na zamykające nawiasy i nieprawidłową składnię poleceń FOR
i IF
, ponieważ zostaną one przeanalizowane.
Aktualizacja
Aktualizacja w odpowiedzi dbenham dała mi kilka pomysłów. Po pierwsze - istnieją dwa różne przypadki, w których możemy potrzebować komentarzy wieloliniowych - w kontekście nawiasów, gdzie nie można użyć GOTO i poza nim. Kontekst nawiasach możemy użyć innego wsporniki jeśli jest to warunek, który zapobiega kod będzie executed.Though Thede kod nadal będą przetwarzane i zostaną wykryte jakieś błędy składniowe ( FOR
, IF
, wsporniki nieprawidłowo zamknięte, niewłaściwy parametr ekspansja ..). So jeśli to możliwe, lepiej użyć GOTO.
Chociaż nie jest możliwe utworzenie makra / zmiennej używanej jako etykieta - ale jest możliwe użycie makr do komentarzy w nawiasach, jednak można zastosować dwie sztuczki, aby komentarze GOTO były bardziej symetryczne i przyjemniejsze (przynajmniej dla mnie). W tym celu wykorzystam dwie sztuczki - 1) możesz umieścić pojedynczy symbol przed etykietą, a goto nadal będzie w stanie go znaleźć (nie mam pojęcia, dlaczego tak się dzieje, sądzę, że szuka dysku). 2) możesz umieścić pojedynczą wartość :
na końcu nazwy zmiennej, a funkcja zastępowania / podciągania nie zostanie uruchomiona (nawet pod włączonymi rozszerzeniami). To w połączeniu z makrami komentarzy w nawiasach może sprawić, że oba przypadki będą wyglądać prawie tak samo.
Oto przykłady (w kolejności, w której najbardziej je lubię):
Z prostokątnymi wspornikami :
@echo off
::GOTO comment macro
set "[:=goto :]%%"
::brackets comment macros
set "[=rem/||(" & set "]=)"
::testing
echo not commented 1
%[:%
multi
line
comment outside of brackets
%:]%
echo not commented 2
%[:%
second multi
line
comment outside of brackets
%:]%
::GOTO macro cannot be used inside for
for %%a in (first second) do (
echo first not commented line of the %%a execution
%[%
multi line
comment
%]%
echo second not commented line of the %%a execution
)
Z nawiasami klamrowymi :
@echo off
::GOTO comment macro
set "{:=goto :}%%"
::brackets comment macros
set "{=rem/||(" & set "}=)"
::testing
echo not commented 1
%{:%
multi
line
comment outside of brackets
%:}%
echo not commented 2
%{:%
second multi
line
comment outside of brackets
%:}%
::GOTO macro cannot be used inside for loop
for %%a in (first second) do (
echo first not commented line of the %%a execution
%{%
multi line
comment
%}%
echo second not commented line of the %%a execution
)
Z nawiasami :
@echo off
::GOTO comment macro
set "(:=goto :)%%"
::brackets comment macros
set "(=rem/||(" & set ")=)"
::testing
echo not commented 1
%(:%
multi
line
comment outside of brackets
%:)%
echo not commented 2
%(:%
second multi
line
comment outside of brackets
%:)%
::GOTO macro cannot be used inside for loop
for %%a in (first second) do (
echo first not commented line of the %%a execution
%(%
multi line
comment
%)%
echo second not commented line of the %%a execution
)
Mieszanka między stylami PowerShell i C ( <
nie można jej użyć, ponieważ przekierowanie ma wyższy priorytet. *
Nie można jej użyć z powodu %*
):
@echo off
::GOTO comment macro
set "/#:=goto :#/%%"
::brackets comment macros
set "/#=rem/||(" & set "#/=)"
::testing
echo not commented 1
%/#:%
multi
line
comment outside of brackets
%:#/%
echo not commented 2
%/#:%
second multi
line
comment outside of brackets
%:#/%
::GOTO macro cannot be used inside for loop
for %%a in (first second) do (
echo first not commented line of the %%a execution
%/#%
multi line
comment
%#/%
echo second not commented line of the %%a execution
)
Aby podkreślić , to jest komentarz (myślę, że nie jest taki krótki):
@echo off
::GOTO comment macro
set "REM{:=goto :}REM%%"
::brackets comment macros
set "REM{=rem/||(" & set "}REM=)"
::testing
echo not commented 1
%REM{:%
multi
line
comment outside of brackets
%:}REM%
echo not commented 2
%REM{:%
second multi
line
comment outside of brackets
%:}REM%
::GOTO macro cannot be used inside for
for %%a in (first second) do (
echo first not commented line of the %%a execution
%REM{%
multi line
comment
%}REM%
echo second not commented line of the %%a execution
)