break||(
code that cannot contain non paired closing bracket
)
Bien que la goto
solution soit une bonne option, elle ne fonctionnera pas entre crochets (y compris les commandes FOR et IF). Cependant, vous devez faire attention à la fermeture des crochets et à la syntaxe invalide des commandes FOR
et IF
car elles seront analysées.
Mettre à jour
La mise à jour de la réponse de dbenham m'a donné quelques idées. Premièrement - il y a deux cas différents où nous pouvons avoir besoin de commentaires sur plusieurs lignes - dans le contexte d'une parenthèse où GOTO ne peut pas être utilisé et en dehors. Le contexte de l' intérieur , nous pouvons utiliser une autre parenthèse s'il y a une condition qui empêche le code à executed.Though le Thede de code sera toujours analysé et quelques erreurs de syntaxe sera détecté ( FOR
, IF
, supports mal fermés, mauvaise extension des paramètres ..). Donc , si c'est possible, il vaut mieux utiliser GOTO.
Bien qu'il ne soit pas possible de créer une macro / variable utilisée comme étiquette - mais il est possible d'utiliser des macros pour les commentaires des crochets, deux astuces peuvent encore être utilisées pour rendre les commentaires GOTO plus symétriques et plus agréables (du moins pour moi). Pour cela, je vais utiliser deux astuces - 1) vous pouvez mettre un seul symbole devant une étiquette et goto sera toujours en mesure de le trouver (je n'ai aucune idée de pourquoi cela, je pense qu'il cherche un lecteur). 2) vous pouvez en mettre un seul :
à la fin d'un nom de variable et une fonctionnalité de remplacement / sous-chaîne ne sera pas déclenchée (même sous les extensions activées). Ce qui, combiné avec les macros pour les commentaires entre crochets, peut rendre les deux cas presque identiques.
Voici donc les exemples (dans l'ordre où je les aime le plus):
Avec supports rectangulaires :
@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
)
Avec accolades :
@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
)
Avec parenthèses :
@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
)
Mélange entre les styles PowerShell et C ( <
ne peut pas être utilisé car la redirection est avec un prio plus élevé. *
Ne peut pas être utilisé à cause de 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
)
Pour souligner que c'est un commentaire (je pense que ce n'est pas si court):
@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
)