J'ai un fichier de commandes qui exécute plusieurs scripts python qui modifient les tables.
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!)
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?
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
::
ou REM
:: commenttttttttttt
REM commenttttttttttt
&
:your commands here & :: commenttttttttttt
IF/ELSE
, FOR
, etc.), utilisezREM
car ::
génère une erreur.::
peut échouer dans setlocal ENABLEDELAYEDEXPANSION
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.
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
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...
& :: 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.
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.
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
::
dans une logique imbriquée (boucles IF-ELSE
, FOR
, etc.) provoquera une erreur. Dans ces cas, utilisezREM
à la place.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