break||(
code that cannot contain non paired closing bracket
)
Embora a goto
solução seja uma boa opção, ela não funcionará entre colchetes (incluindo os comandos FOR e IF). Mas funcionará. No entanto, você deve ter cuidado ao fechar colchetes e sintaxe inválida para comandos FOR
e IF
porque eles serão analisados.
Atualizar
A atualização na resposta do dbenham me deu algumas idéias. Primeiro - há dois casos diferentes em que podemos precisar de comentários de várias linhas - em um contexto de colchetes onde GOTO não pode ser usado e fora dele. Dentro de colchetes de contexto, pode usar outro parêntesis, se há uma condição que impede que o código a ser executed.Though o Thede código ainda será analisado e alguns erros de sintaxe será detectado ( FOR
, IF
, suportes indevidamente fechadas, expansão de parâmetros errado ..). Assim, se for possível, é melhor usar GOTO.
Embora não seja possível criar uma macro / variável usada como um rótulo - mas é possível usar macros para comentários de colchetes. Ainda assim, dois truques podem ser usados para tornar os comentários GOTO mais simétricos e mais agradáveis (pelo menos para mim). Para isso, usarei dois truques - 1) você pode colocar um único símbolo na frente de uma etiqueta e goto ainda será capaz de encontrá-lo (não tenho ideia do motivo disso. Meu palpite é que ele está procurando uma unidade). 2) você pode colocar um único :
no final de um nome de variável e um recurso de substituição / subtração não será acionado (mesmo em extensões habilitadas). O que combinado com as macros para comentários de colchetes pode fazer com que os dois casos pareçam quase iguais.
Então, aqui estão os exemplos (na ordem em que mais gosto):
Com colchetes retangulares :
@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
)
Com chaves :
@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
)
Com parênteses :
@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
)
Mistura entre os estilos PowerShell e C ( <
não pode ser usado porque o redirecionamento é com prio superior. *
Não pode ser usado por causa do %*
):
@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
)
Para enfatizar que é um comentário (embora não seja tão curto):
@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
)