Commentant plusieurs lignes dans le fichier batch DOS
J'ai écrit un énorme fichier Batch MS DOS. Pour tester ce fichier batch, j'ai besoin d'exécuter quelques lignes seulement et je veux masquer / commenter restant.
J'ai quelques lignes de commentaire existantes commençant par:: par conséquent, je ne peux plus utiliser :: car il va brouiller tous les commentaires.
Toute aide à cet égard sera appréciée. Merci d'avance, Jay
6 réponses
Vous pouvez utiliser un goto
pour ignorer le code.
goto comment
...skip this...
:comment
Si vous voulez ajouter REM au début de chaque ligne au lieu d'utiliser GOTO, vous pouvez utiliser Notepad++ pour le faire facilement en suivant ces étapes:
- Sélectionnez le bloc de lignes
- Appuyez sur Ctrl-Q
Répétez les étapes pour décommenter
Une autre option consiste à entourer les lignes indésirables dans un bloc IF qui ne peut jamais être true
if 1==0 (
...
)
Bien sûr, rien dans le bloc if ne sera exécuté, mais il sera analysé. Donc, vous ne pouvez pas avoir de syntaxe invalide à l'intérieur. En outre, le commentaire ne peut pas contenir )
à moins qu'il ne soit échappé ou cité. Pour ces raisons, la solution Goto acceptée est plus fiable. (La solution GOTO peut également être plus rapide)
Mise à Jour 2017-09-19
Voici une amélioration cosmétique pour solution Goto de pdub . Je définis une variable d'environnement simple "macro"qui rend la syntaxe des commentaires GOTO un peu mieux documentée. Bien qu'il soit généralement recommandé que: les étiquettes soient uniques dans un script batch, il est vraiment acceptable d'intégrer plusieurs commentaires comme celui - ci dans le même script batch.
@echo off
setlocal
set "beginComment=goto :endComment"
%beginComment%
Multi-line comment 1
goes here
:endComment
echo This code executes
%beginComment%
Multi-line comment 2
goes here
:endComment
echo Done
, Ou vous pouvez utiliser l'une de ces variantes de npocmaka la solution de. L'utilisation de REM au lieu de BREAK rend l'intention un peu plus claire.
rem.||(
remarks
go here
)
rem^ ||(
The space after the caret
is critical
)
break||(
code that cannot contain non paired closing bracket
)
Bien que la solution goto
soit une bonne option, elle ne fonctionnera pas entre parenthèses (y compris les commandes FOR ET IF).Mais cette volonté. Bien que vous devriez faire attention à la fermeture des crochets et à la syntaxe invalide pour les commandes FOR
et IF
car elles seront analysées.
mise à Jour
La mise à jour de la réponse de de dbenham m'a donné quelques idées.
Tout d'abord-il y a deux cas différents où nous pouvons avoir besoin de commentaires multi-lignes-dans un support contexte où GOTO ne peut pas être utilisé et à l'extérieur.
Contexte entre parenthèses nous pouvons utiliser d'autres parenthèses s'il y a une condition qui empêche l'exécution du code.Bien que le code thede sera toujours analysé
et certaines erreurs de syntaxe seront détectées (FOR
,IF
,crochets mal fermés, extension de paramètre incorrecte..). donc, si c'est possible, il est préférable d'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 parenthèses commentaire.Encore deux astuces peuvent être utilisées faire le GOTO
commentaires plus symétrique et plus agréable (au 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
pour le trouver (je n'ai aucune idée pourquoi est this.My guues il est à la recherche d'un lecteur). 2) vous pouvez mettre un seul :
à la fin d'un nom de variable et une fonction de remplacement / soustraction ne sera pas déclenchée (même sous les extensions activées). Qui, combiné avec les macros pour les commentaires entre parenthèses peuvent
faire les deux cas à regarder presque la même chose.
Voici donc les exemples (dans l'ordre que je les aime le plus):
Avec crochets 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 les 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 entrepowershell et c styles (<
ne peut pas être utilisé car la redirection est avec prio supérieur.*
ne peut pas être utilisé en raison 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
)
À emphase c'est un commentaire (pensé 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
)
@jeb
Et après cela, le stderr semble être inaccessible
Non, essayez ceci:
@echo off 2>Nul 3>Nul 4>Nul
ben ali
mubarak 2>&1
gadeffi
..next ?
echo hello Tunisia
pause
Mais pourquoi ça marche?
Désolé, je réponds à la question en français:
(la redirection par 3> est spéciale car elle persiste, on va l'utiliser pour capturer le flux des erreurs 2> est on va le transformer en un flux persistant à l'issue de 3 > ceci va nous permettons d'avoir une gestion des erreurs pour tout notre environnement de script..par la suite si on veut récupérer le flux 'stderr' il faut faire une autre redirection du handle 2> au handle 1 > qui n'est autre que la console.. )
Essayez ceci:
@echo off 2>Nul 3>Nul 4>Nul
ben ali
mubarak
gadeffi
..next ?
echo hello Tunisia
pause