break||(
code that cannot contain non paired closing bracket
)
Si bien la solución goto
es una buena opción, no funcionará within brackets (incluidos los comandos FOR e IF). Pero esto lo hará. Aunque debe tener cuidado con el cierre de corchetes y la sintaxis no válida para los comandos FOR
y IF
, ya que se analizarán.
actualización
La actualización de la respuesta dbenham's me dio algunas ideas. Primero, hay dos casos diferentes en los que podemos necesitar comentarios de varias líneas, en el contexto de un corchete donde GOTO no se puede usar y fuera de él. En el contexto de corchetes internos podemos usar otros corchetes si hay una condición que impide que se ejecute el código. Aunque el código thede aún se analizará y se detectarán algunos errores de sintaxis (FOR
, IF
, corchetes incorrectamente cerrados, expansión incorrecta de parámetros. .). Entonces, si es posible, es mejor usar GOTO.
Aunque no es posible crear una macro/variable utilizada como etiqueta, pero es posible usar macros para comentarios de corchetes. Hasta dos trucos se pueden usar para hacer los comentarios GOTO más simétricos y más agradables (al menos para yo). Para esto voy a utilizar dos trucos - 1) puedes poner un solo símbolo en frente de una etiqueta y goto todavía podrá para encontrarlo (no tengo ni idea de por qué es esto. Mi guues está buscando una unidad) 2) puede poner un solo :
al final de un nombre de variable y una función de reemplazo/subcadena no se activará (incluso en las extensiones habilitadas). Lo cual combinado con las macros para comentarios de paréntesis puede hacer que los dos casos se vean casi iguales.
Así que aquí están los ejemplos (en el orden que les gusta más):
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
)
Con 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 powershell y C estilos (<
no se pueden utilizar debido a que la redirección es con mayor prio.*
no se pueden utilizar debido a la %*
):
@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 EMPHASE que es un comentario (pensamos que no es tan corta):
@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
)
Gracias señor! – user219628
+1: ¡Es divertido usar "goto" para esto Y funciona! –
Creo que lo curioso es que no hay definición comentario real en la línea de comandos, simplemente no puedo aceptar 'líneas REM' como líneas de comentario, que hace que la salida oscura – mkb