break||(
code that cannot contain non paired closing bracket
)
Podczas gdy rozwiązanie goto
jest dobrym rozwiązaniem, nie będzie działać within brackets (w tym polecenia FOR i IF). Ale to będzie. Chociaż należy zachować ostrożność podczas zamykania nawiasów i niepoprawnej składni dla poleceń FOR
i IF
, ponieważ zostaną one przeanalizowane.
Aktualizacja
Aktualizacja w dbenham's odpowiedź dał mi kilka pomysłów. Po pierwsze - są dwa różne przypadki, w których możemy potrzebować komentarzy wielowierszowych - w kontekście nawiasu, w którym nie można użyć GOTO i poza nim. Kontekst nawiasów wewnętrznych można użyć w nawiasach, jeśli istnieje warunek uniemożliwiający wykonanie kodu. Mimo że kod nadal będzie analizowany , wykryte zostaną błędy składniowe (FOR
, IF
, niewłaściwie zamknięte nawiasy, nieprawidłowe rozszerzenie parametrów. .) Jeśli więc jest to możliwe, lepiej użyć GOTO. Chociaż nie jest możliwe utworzenie makra/zmiennej używanej jako etykieta - ale możliwe jest użycie makr do komentarzy do nawiasów. Można użyć dwóch trików, aby GOTO komentarze były bardziej symetryczne i przyjemniejsze (przynajmniej dla mnie). Do tego użyję dwóch trików - 1) możesz umieścić pojedynczy symbol przed etykietą, a goto nadal będzie w stanie go znaleźć (nie mam pojęcia, dlaczego tak jest). Moje guziki szukają dysku). 2) można umieścić pojedyncze :
na końcu nazwy zmiennej, a funkcja wymiany/subtringowania nie zostanie wyzwolona (nawet w przypadku włączonych rozszerzeń). W połączeniu z makrami dla nawiasów komentarze mogą sprawić, że oba przypadki wyglądają prawie tak samo.
Tak oto przykłady (w kolejności Lubię je najbardziej):
Z prostokątnych nawiasach:
@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 nawiasów klamrowych:
@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 nawiasy:
@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
)
mieszanką PowerShell C style (<
nie mogą być stosowane, ponieważ przekierowania jest z wyższą prio.*
nie mogą być stosowane ze względu na %*
):
@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 Emphase To jest komentarz (myślał, że nie jest tak krótka):
@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
)
Dziękuję sir! – user219628
+1: Zabawne jest używanie "goto" do tego i działa! –
Myślę, że to zabawne, że nie ma prawdziwej definicji komentarza w linii poleceń, po prostu nie mogę zaakceptować linii 'REM' jako linii komentarza, sprawia, że wynik jest niejasny – mkb