Comment «commenter» (ajouter un commentaire) dans un lot / cmd?


883

J'ai un fichier batch qui exécute plusieurs scripts python qui font des modifications de table.

  1. Je veux 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 le prochain utilisateur sache que ces scripts existent en option!)

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

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


6
Voir également d'excellentes réponses ici stackoverflow.com/q/12407800/1011025
ndemou

2
Vous pouvez utiliser la Rem Sthcommande ou utiliser cette marque::: Sth
scientist_7

Réponses:


881

La remcommande est en effet pour commentaires. Il ne met à jour intrinsèquement personne après l'exécution du script. Certains auteurs de scripts peuvent l'utiliser de cette manière au lieu de echo, car, par défaut, l'interpréteur de lots imprime chaque commande avant qu'elle ne soit traitée. Puisque les remcommandes ne font rien, il est sûr de les imprimer sans effets secondaires. Pour éviter d'imprimer une commande, préfixez-la avec @ou, pour appliquer ce paramètre à l'ensemble du programme, exécutez @echo off. (C'est echo offpour éviter d'imprimer d'autres commandes; @c'est pour éviter d'imprimer cette commande avant que le paramètre d'écho ne prenne effet.)

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

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

405
vous pouvez également utiliser deux deux points "::". C'est l'une des deux façons d'ajouter des remarques dans le fichier de commandes sans afficher ou exécuter cette ligne lors de l'exécution du fichier de commandes. Contrairement à REM, cette ligne ne s'affichera pas, même si ECHO désactivé se trouve dans le fichier de commandes.
Brent81

12
@ Brent81 Je pense que cela devrait être la bonne réponse. Lors de l'utilisation de la coloration syntaxique, la commande REM ne met pas réellement le texte en surbrillance comme "commenté".
Automatico

17
Le double-deux-points est une "étiquette invalide"; voici un article qui l'explique, et pourquoi ses performances peuvent être meilleures que REM (en particulier sur les disquettes!), et cela ne fonctionnera pas dans les blocs de code en retrait (uniquement sur le premier caractère): robvanderwoude.com/comments.php
Michael Paulukonis

4
Intéressant. Je pensais que REM était le «commentaire sur toute la ligne» et le double-colon était le «commentaire en ligne», commeREM This whole line is a comment @echo off :: This comment is inline
Richard Smith

@Alhadis, le script Configure de Perl est écrit en shell Bourne, pas en batch Windows, alors en quoi est-il pertinent ici? De plus, la commande colon étant une syntaxe Bourne valide n'est pas un "effet secondaire bonus"; c'est précisément pourquoi il est utilisé dans ce script Bourne . Il est utilisé en faveur de #pour les commentaires car #, de toute évidence, il pourrait ne pas être un indicateur de commentaire valide dans tous les shells que Configure est censé prendre en charge; voir ligne 3.
Rob Kennedy

956

Utilisez ::ouREM

::   commenttttttttttt
REM  commenttttttttttt

MAIS (comme les gens l'ont noté):

  • Si vous utilisez en ligne, vous devez ajouter du &caractère:
    your commands here & :: commenttttttttttt
  • À l'intérieur de la logique imbriquée ( IF/ELSE, FORboucles, etc ...) utilise REMcar ::donne une erreur
  • :: peut échouer dans setlocal ENABLEDELAYEDEXPANSION

79
Le double signe deux points :: est le commentaire .bat le plus propre qui soit. Et il peut être utilisé au début ou au milieu d'une ligne!
ATSiem

10
N'a pas fonctionné pour moi quand il est fait en ligne comme ça. cd "C:\Folder" ::this throws a syntax error
Shaun Rowan

3
git add :: blah this is not a commentÉchoue également avec "fatal: pathspec 'blah' ne correspond à aucun fichier"
Bob Stein

19
Pour un commentaire sur la même ligne que l'exemple illustre, vous devez ajouter &entre le code et le commentaire ::. Pour illustrer, ouvrez l'invite cmd et exécutez dir ::blahqui ne répertorie pas le contenu de .et ne se compare pas à dir & ::blah, qui le fait
Rado

19
Attention, l'utilisation de ::scripts de bogue avec setlocal ENABLEDELAYEDEXPANSIONetfor
Azevedo

50

Non, les anciens fichiers batch simples utilisent REM de commentaire. ECHOest la commande qui imprime quelque chose à l'écran.

Pour "commenter" les sections du fichier que 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 d'autrefois, ils sont maladroits et moches.

Vous pouvez en lire plus sur ce site Web .

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


31

Le :: au lieu du REM était de préférence utilisé à l'époque où les ordinateurs n'étaient pas très rapides. Les lignes REM'ed sont lues puis intégrées. :: 'La ligne ed est ignorée complètement. 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'en 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

Quant au saut de pièces. Mettre REM devant chaque ligne peut prendre beaucoup de temps. Comme mentionné, l'utilisation de GOTO pour ignorer des parties est un moyen facile d'ignorer de gros morceaux de code. Assurez-vous de définir un: LABEL au point 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

1
Comment ignorer une ligne à deux points sans être lue? L'interprète ne doit-il pas d'abord lire la ligne avant de la reconnaître comme une ligne à deux points?
Rob Kennedy

2
@RobKennedy en lisant la réponse, il ne lit rien après le ::, où tout après REM est lu.
James Jenkins

5
Si l'interpréteur de commandes arrête de lire , @James, il n'exécutera plus jamais le fichier. Il faut évidemment continuer à lire pour découvrir où se termine le commentaire et où commence la ligne suivante du fichier. Il doit faire cela avec ::et remégalement.
Rob Kennedy

2
@RobKennedy, je pensais également que cela impliquait qu'il ne s'appliquait qu'à la ligne sur laquelle la commande était.
James Jenkins

7
@RobKennedy ne lire , mais il n'a pas parse (ou processus) ce qu'il lit, il saute jusqu'à ce que la prochaine \net commence l' analyse syntaxique à nouveau [ la citation nécessaire]
xDaizu

25

Commentaires sur plusieurs lignes

S'il y a un grand nombre de lignes que vous souhaitez commenter, il sera préférable de faire des commentaires sur plusieurs lignes plutôt que de commenter chaque ligne.

Voir cet article de Rob van der Woude sur les blocs de commentaires :

Le langage de traitement par lots n'a pas de blocs de commentaires, bien qu'il existe des moyens d'accomplir l'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 n'importe quel nombre 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...

ceci est souvent utilisé dans les scripts hybrides batch et VBS / JS, bien qu'ils l'aient utilisé si ifau lieu de goto stackoverflow.com/q/9074476/995714 ss64.com/vb/syntax-hybrid.html stackoverflow.com/a/34512715/995714
phuclv

13

Mettre les commentaires sur la même ligne avec les 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 Cest la première commande et :: set red font colorest la seconde.


Important:

Cette déclaration avec commentaire semble intuitivement correcte:

goto error1         :: handling the error

mais ce n'est pas une utilisation valide du commentaire. Cela ne fonctionne que parce qu'il gotoignore tous les arguments après le premier. La preuve est simple, cela goton'échouera pas non plus:

goto error1 handling the error

Mais une tentative similaire

color 17            :: grey on blue

échoue exécutant la commande en raison de 4 arguments inconnus à la colorcommande suivante : ::, grey, on, blue.

Cela ne fonctionnera que comme:

color 17     &      :: grey on blue

L'esperluette est donc inévitable.


D'après les autres réponses, il semble que l'esperluette ne soit pas nécessaire?
RoG

3
@Snaptastic - Les autres réponses sont en fait erronées sur ce point, voir ma récente modification.
miroxlav

Cela semble être la bonne façon; Il est même mis en évidence en tant que commentaire dans mon IDE.
baburao

5

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 :: en logique imbriquée ( IF-ELSE, FORboucles, etc ...) provoquera une erreur. Dans ces cas, utilisez REMplutôt.

Ceci est basé sur la réponse de T.Todua. J'ai senti que leur réponse était bonne mais j'ai omis certains détails importants, mais ils ont annulé ma modification, donc je transforme ma révision en sa propre réponse.
Pikamander2

Pikamander2, votre révision (également, soulignée par l'utilisateur a @Rado été fusionnée en réponse à ce moment-là et merci pour cela, j'ai simplement préféré un autre style pour la réponse et utilisé un style différent.
T.Todua

1

C'est un vieux sujet et j'aimerais ajouter ma compréhension ici pour élargir les connaissances de ce sujet intéressant.

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

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 ceci :: 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 vide pour pouvoir fonctionner comme un commentaire pour la ligne, tandis que :: n'a pas besoin d'espace vide derrière.

Ce REM est une commande elle-même peut être mieux compris à partir de la syntaxe FOR suivante

La syntaxe FOR de base est la suivante

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

ici <Command>peut être n'importe quelle commande valide Nous pouvons donc écrire la ligne de commande valide suivante comme remest une commande

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

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

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

3
techniquement, ::est une étiquette (non valide) (ce qui explique son comportement) et ne doit donc pas être utilisée (bien qu'elle soit encore assez courante)
Stephan

1

Vous pouvez ajouter des commentaires à la fin d'un fichier de commandes avec cette syntaxe:

@echo off
:: Start of code
...
:: End of code

(I am a comment
So I am!
This can be only at the end of batch files

Assurez-vous simplement de ne jamais utiliser de parenthèses fermantes.

Attributions: Leo Guttirez Ramirez sur https://www.robvanderwoude.com/comments.php

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.