break||(
code that cannot contain non paired closing bracket
)
Si bien la goto
solución es una buena opción, no funcionará entre corchetes (incluidos los comandos FOR e IF), pero sí. Aunque debe tener cuidado con el cierre de corchetes y la sintaxis no válida para los comandos FOR
y IF
porque se analizarán.
Actualizar
La actualización en la respuesta de dbenham me dio algunas ideas. Primero, hay dos casos diferentes en los que podemos necesitar comentarios de varias líneas, en un contexto de corchetes donde GOTO no se puede usar y fuera de él. Dentro de los paréntesis contexto se puede utilizar otros soportes si hay una condición que impide que el código sea executed.Though la Thede código todavía se analiza y se detectó algunos errores de sintaxis ( FOR
, IF
, soportes mal cerrados, la expansión de parámetros mal ..). Así si es posible, es mejor usar GOTO.
Aunque no es posible crear una macro / variable utilizada como etiqueta, pero es posible usar macros para los comentarios de corchetes. Sin embargo, se pueden usar dos trucos para hacer que los comentarios GOTO sean más simétricos y más agradables (al menos para mí). Para esto, usaré dos trucos: 1) puedes poner un solo símbolo delante de una etiqueta y goto aún podrá encontrarlo (no tengo idea de por qué es esto, mis amigos está buscando una unidad). 2) puede poner un solo :
al final de un nombre de variable y no se activará una función de reemplazo / subcadena (incluso en las extensiones habilitadas). Lo que combinado con las macros para comentarios de corchetes puede hacer que ambos casos se vean casi iguales.
Así que aquí están los ejemplos (en el orden que más me gustan):
Con soportes rectangulares :
@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 llaves :
@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
)
Entre paréntesis :
@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
)
Mezcla entre los estilos PowerShell y C ( <
no se puede usar porque la redirección es con mayor prioridad. *
No se puede usar debido a %*
):
@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 es un comentario (aunque no es tan corto):
@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
)