break||(
code that cannot contain non paired closing bracket
)
Sebbene la goto
soluzione sia una buona opzione, non funzionerà tra parentesi (inclusi i comandi FOR e IF), ma funzionerà. Anche se dovresti fare attenzione alla chiusura delle parentesi e alla sintassi non valida per i comandi FOR
e IF
perché verranno analizzati.
Aggiornare
L'aggiornamento in risposta del dbenham mi ha dato alcune idee. Primo - ci sono due casi diversi in cui possiamo aver bisogno di commenti su più righe - nel contesto di una parentesi in cui GOTO non può essere utilizzato e al di fuori di esso. All'interno del contesto delle parentesi possiamo usare altre parentesi se c'è una condizione che impedisce l'esecuzione del codice Anche se il codice verrà comunque analizzato e verranno rilevati alcuni errori di sintassi ( FOR
,IF
, staffe in modo improprio chiusi, espansione di parametro sbagliato ..). Quindi, se è possibile è meglio usare GOTO.
Sebbene non sia possibile creare una macro / variabile utilizzata come etichetta, ma è possibile utilizzare macro per i commenti delle parentesi, tuttavia si possono utilizzare due trucchi per rendere i commenti GOTO più simmetrici e più piacevoli (almeno per me). Per questo userò due trucchi: 1) puoi mettere un singolo simbolo davanti a un'etichetta e goto sarà ancora in grado di trovarlo (non ho idea del perché sia questo, secondo me sta cercando un'unità).2) puoi mettere un singolo :
alla fine del nome di una variabile e una funzione di sostituzione / sottrazione non verrà attivata (anche con estensioni abilitate). Che combinato con le macro per i commenti tra parentesi può far sembrare entrambi i casi quasi uguali.
Quindi ecco gli esempi (nell'ordine che mi piacciono di più):
Con staffe rettangolari :
@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
)
Con parentesi graffe :
@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
)
Con parentesi :
@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
)
Miscela tra stili PowerShell e C ( <
non può essere utilizzato perché il reindirizzamento è con prezzo più alto. *
Non può essere utilizzato a causa di %*
):
@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
)
Per sottolineare questo è un commento (anche se non è così breve):
@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
)