136 votes

Commenter plusieurs lignes dans un fichier batch DOS

J'ai écrit un énorme fichier MS DOS Batch. Pour tester ce fichier batch, j'ai besoin d'exécuter certaines lignes seulement et de masquer/commenter le reste.

J'ai des lignes de commentaire existantes commençant par :: donc je ne peux plus utiliser :: car cela brouillerait tous les commentaires.

Comment puis-je résoudre ce problème?

239voto

pdubs Points 649

Vous pouvez utiliser un goto pour sauter par-dessus du code.

goto commentaire
...sauter ceci...
:commentaire

13 votes

+1 : C'est amusant d'utiliser "goto" pour cela ET ça marche !

3 votes

Je pense que ce qui est drôle, c'est qu'il n'y a pas de véritable définition de commentaire en ligne de commande, je ne peux tout simplement pas accepter les lignes REM comme lignes de commentaire, cela rend la sortie obscure.

155voto

cvacca Points 151

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 :

  1. Sélectionnez le bloc de lignes
  2. Appuyez sur Ctrl-Q

Répétez les étapes pour dé-commenter

8 votes

Bel astuce. rend tout beaucoup plus propre.

3 votes

Wow, je ne savais pas que Notepad++ avait une fonctionnalité aussi sympa! En fait, je l'ai vraiment manquée car je suis habitué à `Ctrl+7' dans Eclipse. Voté jusqu'à 42 ;)

1 votes

Qu'en est-il du décommentaire. Y a-t-il un raccourci pour décommenter tout le bloc.

16voto

dbenham Points 46458

Une autre option consiste à placer les lignes non désirées dans un bloc IF qui ne peut jamais être vrai

if 1==0 (
...
)

Bien sûr, rien dans le bloc if ne sera exécuté, mais il sera analysé. Vous ne pouvez donc pas avoir de syntaxe non valide à l'intérieur. De plus, le commentaire ne peut pas contenir ) sauf s'il est échappé ou mis entre guillemets. 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 de la solution GOTO de pdub. Je définis une simple variable d'environnement "macro" qui rend la syntaxe du commentaire GOTO un peu plus auto-documentée. Bien qu'il soit généralement recommandé que les :étiquettes soient uniques dans un script batch, il est vraiment OK d'intégrer plusieurs commentaires de ce type dans le même script batch.

@echo off
setlocal

set "beginComment=goto :endComment"

%beginComment%
Commentaire sur plusieurs lignes 1
se trouve ici
:endComment

echo Ce code s'exécute

%beginComment%
Commentaire sur plusieurs lignes 2
se trouve ici
:endComment

echo Terminé

Ou vous pourriez utiliser l'une de ces variantes de la solution de npocmaka. L'utilisation de REM au lieu de BREAK rend l'intention un peu plus claire.

rem.||(
   les remarques
   vont ici
)

rem^ ||(
   L'espace après le chapeau
   est essentiel
)

1 votes

...ou rem/||(…) qui serait sûr par rapport à rem....

0voto

walid2mi Points 1222

@jeb

Et après avoir utilisé ceci, la 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 fonctionne ?

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'aide de 3> ceci va nous permettre 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.. )

2 votes

Je ne peux pas lire le français, mais il ne semble pas que vous expliquiez pourquoi le flux 2 (stderr) reste désactivé après la redirection initiale. J'ai une théorie fonctionnelle et des cas de test dans 2 messages consécutifs sur dostips.com/forum/viewtopic.php?p=14612#p14612.

0 votes

(Redirection par 3> est spéciale car elle persiste, nous l'utiliserons pour capturer le flux des erreurs 2> cela le transformera en un flux persistant vers ade de 3> cela nous permettra d'avoir une gestion des erreurs pour l'un de nos scripts d'environnement.. donc si vous voulez récupérer le flux 'stderr' nous devons créer une autre redirection 2> pour gérer a> qui n'est autre que la console..)

0voto

walid2mi Points 1222

Essayez ceci:

   @echo off 2>Nul 3>Nul 4>Nul

   ben ali
   mubarak
   gadeffi
   ..suivant ?

   echo bonjour Tunisie

   pause

0 votes

+1, Mais pourquoi cela fonctionne-t-il? Et après avoir utilisé ceci, le stderr semble être inaccessible

1 votes

-1, Ceci "fonctionne" parce que echo 2>Nul redirige le flux d'erreur standard vers NUL, l'enfouissant (les 3>Nul, 4>Nul redirigent des flux auxiliaires sans réelle raison). Cela ne commente pas les lignes, cela empêche simplement l'affichage des messages d'erreur. Ainsi, tout ce qui peut être interprété comme des lignes de commande s'exécutera toujours.

3 votes

Le commentaire de pdubs est partiellement correct en ce sens que les commandes s'exécutent toujours (et échouent car elles ne sont pas valides). Mais des commandes valides s'exécuteraient sans échec. Ainsi, ce n'est pas une bonne solution pour commenter des lignes de code. L'explication selon laquelle le flux 2 (stderr) est "permanemment" désactivé n'est pas correcte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X