web-dev-qa-db-fra.com

Comment "commenter" (ajouter un commentaire) dans un batch/cmd?

J'ai un fichier de commandes qui exécute plusieurs scripts python qui modifient les tables. 

  1. Je souhaite que les utilisateurs commentent les 1-2 scripts python qu'ils ne veulent pas exécuter, plutôt que de les supprimer du fichier de commandes (afin que l'utilisateur suivant sache que ces scripts existent sous forme d'options!)

  2. Je souhaite également ajouter des commentaires pour attirer leur attention sur les variables dont ils ont besoin pour se mettre à jour dans le fichier Batch avant de l'exécuter. Je vois que je peux utiliser REM. Mais il semble que ce soit davantage pour mettre à jour l'utilisateur après l'avoir exécuté. 

Existe-t-il une syntaxe pour ajouter un commentaire de manière plus appropriée?

712
user1397044

La commande rem est en effet pour les commentaires. De manière inhérente, il ne met à jour personne après avoir exécuté le script. Certains auteurs de script pourraient l’utiliser de cette manière au lieu de echo, car, par défaut, l’interpréteur de traitement par lots imprimera imprimera chaque commande avant son traitement. Puisque les commandes rem ne font rien, vous pouvez les imprimer sans effets secondaires. Pour éviter d'imprimer une commande, préfixez-la avec @ ou, pour appliquer ce paramètre à tout le programme, exécutez @echo off. (C’est echo off pour éviter d’imprimer d’autres commandes; le @ consiste à éviter d’imprimer that command avant que le réglage d’écho ne prenne effet.)

Donc, dans votre fichier batch, vous pourriez utiliser ceci:

@echo off
REM To skip the following Python commands, put "REM" before them:
python foo.py
python bar.py
723
Rob Kennedy

:: ou REM

::   commenttttttttttt
REM  commenttttttttttt

MAIS (comme les gens ont noté):

  • Si vous utilisez inline, vous devez ajouter le caractère &:
    your commands here & :: commenttttttttttt
  • Dans la logique imbriquée (boucles IF/ELSE, FOR, etc.), utilisezREMcar :: génère une erreur.
  • :: peut échouer dans setlocal ENABLEDELAYEDEXPANSION 
787
T.Todua

Non, les anciens fichiers de commandes utilisent REM comme commentaire. ECHO est la commande qui imprime quelque chose à l'écran.

Pour "commenter" les sections du fichier, vous pouvez utiliser GOTO. Un exemple de toutes ces commandes/techniques:

REM it starts here the section below can be safely erased once the file is customised
ECHO Hey you need to edit this file before running it!  Check the instructions inside
ECHO Now press ctrl-c to interrupt execution or enter to continue
PAUSE
REM erase the section above once you have customised the file
python executed1.py
ECHO Skipping some stuff now
GOTO End
python skipped1.py
python skipped2.py
:END
python executed2.py

Que puis-je dire? Les fichiers batch sont une relique de temps révolus, ils sont maladroits et laids.

Vous pouvez lire plus sur ce site .

EDIT: modifie un peu l’exemple pour qu’il contienne les éléments que vous recherchez apparemment.

42
fvu

Le :: au lieu de REM a été utilisé de préférence dans les jours où les ordinateurs n'étaient pas très rapides . Les lignes REM'ed sont lues puis mémorisées. :: Les lignes sont ignorées jusqu'au bout. Cela pourrait accélérer votre code "dans l'ancien temps". De plus après un REM vous avez besoin d’un espace, après :: vous n’avez pas.

Et comme dit dans le premier commentaire: vous pouvez ajouter des informations à n'importe quelle ligne que vous ressentez le besoin de

SET DATETIME=%DTS:~0,8%-%DTS:~8,6% ::Makes YYYYMMDD-HHMMSS

En ce qui concerne le saut de parties .. Mettre REM devant chaque ligne peut prendre beaucoup de temps .. Comme mentionné, utiliser GOTO pour sauter des parties est un moyen facile de sauter de gros morceaux de code. Veillez à définir: LABEL à l'endroit où vous souhaitez que le code continue.

SOME CODE

GOTO LABEL  ::REM OUT THIS LINE TO EXECUTE THE CODE BETWEEN THIS GOTO AND :LABEL

SOME CODE TO SKIP
.
LAST LINE OF CODE TO SKIP

:LABEL
CODE TO EXECUTE
28
Kees

Commentaires multi-lignes

Si vous souhaitez commenter un grand nombre de lignes, il est préférable de pouvoir commenter plusieurs lignes plutôt que de les commenter toutes les lignes. 

Le langage de traitement par lots ne comporte pas de blocs de commentaires, bien qu'il existe des moyens d’accomplir cet effet.

GOTO EndComment1
This line is comment.
And so is this line.
And this one...
:EndComment1

Vous pouvez utiliser GOTO Label et: Label pour faire des commentaires de bloc.

Ou, si le bloc de commentaires apparaît à la fin du fichier de commandes, vous pouvez écrire EXIT à la fin du code, puis un nombre quelconque de commentaires, pour votre compréhension.

@ECHO OFF
REM Do something
  •
  •
REM End of code; use GOTO:EOF instead of EXIT for Windows NT and later
EXIT

Start of comment block at end of batch file
This line is comment.
And so is this line.
And this one...

Commentaires Source

22
Somnath Muluk

Mettre des commentaires sur la même ligne avec des commandes: utilisez & :: comment

color C          & :: set red font color
echo IMPORTANT INFORMATION
color            & :: reset the color to default

Explication:

& sépare deux commandes , donc dans ce cas, color C est la première commande et :: set red font color est la deuxième.


Important:

Cette déclaration avec commentaire semble intuitivement correcte:

goto error1         :: handling the error

mais c'est utilisation non valide du commentaire. Cela fonctionne uniquement parce que goto ignore tous les arguments après le premier. La preuve est simple, cette goto n'échouera pas non plus:

goto error1 handling the error

Mais tentative similaire

color 17            :: grey on blue

échec de l'exécution de la commande en raison de 4 arguments inconnus de la commande color: ::, grey, on, blue.

Cela fonctionnera seulement comme:

color 17     &      :: grey on blue

_ {L'esperluette est donc inévitable.

12
miroxlav

Vous pouvez commenter quelque chose en utilisant :: ou REM:

your commands here
:: commenttttttttttt

ou

your commands here
REM  commenttttttttttt

Pour le faire sur la même ligne qu'une commande, vous devez ajouter une esperluette:

your commands here      & ::  commenttttttttttt

ou

your commands here      & REM  commenttttttttttt

Remarque:

  • L'utilisation de::dans une logique imbriquée (boucles IF-ELSE, FOR, etc.) provoquera une erreur. Dans ces cas, utilisezREMà la place.
2
Pikamander2

C'est un sujet ancien et je voudrais ajouter ma compréhension ici pour élargir la connaissance de ce sujet intéressant. 

La principale différence entre REM et :: est la suivante:

REM est une commande elle-même, alors que :: n'est PAS. 

Nous pouvons traiter :: comme un jeton qui, dès que l'analyseur CMD rencontre le premier espace non vide d'une ligne est this: token, il sautera simplement la ligne entière et lira la ligne suivante. C'est pourquoi REM doit être suivi d'au moins un espace pour pouvoir servir de commentaire à la ligne, alors que :: n'a pas besoin d'espace derrière.

Le fait que REM soit une commande elle-même peut être mieux compris à partir de la syntaxe SUIVANTE POUR

La syntaxe de base de FOR est la suivante

FOR %v in (set) DO <Command> [command param] 

ici <Command> peut être n’importe quelle commande valideNous pouvons écrire la ligne de commande valide suivante car rem est une commande

FOR %i in (1,2,3) DO rem echo %i

Cependant, nous NE POUVONS PAS écrire la ligne suivante, car :: n'est pas une commande.

FOR %i in (1,2,3) DO :: echo %i
0
jyao