318 votes

Quel style de commentaire dois-je utiliser dans les fichiers de commandes?

J'ai écrit certains des fichiers batch, et je suis tombé sur ce guide de l'utilisateur, qui a été très instructif. Une chose qu'il m'a montré était que les lignes peuvent être commentées et pas seulement avec REM, mais aussi avec d' ::. Il dit:

Les commentaires dans le code de lot peut être faite à l'aide d'un double deux-points, c'est mieux que d'utiliser la commande REM parce que les étiquettes sont traitées avant les symboles de redirection. ::<remark> ne pose pas de problèmes, mais rem <remark> produit des erreurs.

Pourquoi, alors, ne la plupart des guides et des exemples, je vois l'utilisation de l' REM commande? N' :: fonctionne sur toutes les versions de Windows?

396voto

Joey Points 148544

:: est essentiellement une étiquette vierge, qui ne peut jamais être sauté, alors qu' REM est une commande qui n'arrête rien. Dans les deux cas (au moins sur Windows 7) la présence d'opérateurs de redirection de causer un problème.

Toutefois, :: est connu pour se conduisent mal dans les blocs, dans certaines circonstances, être analysée non pas comme une étiquette, mais comme une sorte de lettre de lecteur. Je suis un peu floue où exactement, mais cela seul suffit à me faire utiliser REM exclusivement. C'est le documentée et étayée de façon à incorporer des commentaires dans des fichiers batch alors qu' :: est simplement un artefact d'une implémentation particulière.

178voto

jeb Points 26035

Commentaires avec REM

Un REM peut remarquer une ligne complète, également d'une multiligne curseur à la fin de ligne, si ce n'est pas la fin de la première partie.

REM This is a comment, the caret is ignored^
echo This line is printed

REM This_is_a_comment_the_caret_appends_the_next_line^
echo This line is part of the remark

Commentaires ::

Un :: toujours exécute une extrémité de la ligne de curseur.

:: This is also a comment^
echo This line is also a comment

Étiquettes et également le commentaire de l'étiquette :: ont une logique dans la parenthèse blocs.
Ils s'étendent toujours deux lignes DONC: commande goto ne fonctionne pas.
Donc, ils ne sont pas recommandés pour les parenthèses, les blocs, car ils sont souvent la cause d'erreurs de syntaxe.

Avec ECHO ON un REM ligne s'affiche, mais pas une ligne commentée avec ::

Les deux ne peux pas vraiment commenter le reste de la ligne, donc un simple %~ entraîne une erreur de syntaxe.

REM This comment will result in an error %~ ...

Mais REM est capable d'arrêter le lot de l'analyseur à une phase précoce, avant même que le caractère spécial de la phase est fait.

@echo ON
REM This caret ^ is visible

Commentaires pour cent des signes

Il existe un style de commentaires avec des signes de pourcentage.

Dans reallity ce sont des variables, mais elles se sont élargies à rien.
Mais l'avantage est qu'ils peuvent être placés dans la même ligne, même sans &.
Le signe égal assure, qu'une telle variable ne peut pas existe.

echo Mytest
set "var=3"     %= This is a comment in the same line=%

Le pourcentage de style, est recommandé pour le lot des macros, comme on ne change pas le moteur d'exécution de comportement, comme le commentaire sera supprimé lorsque la macro est définie.

set $test=(%\n%
%=Start of code=% ^
echo myMacro%\n%
)

29voto

dbenham Points 46458

Une autre alternative consiste à exprimer le commentaire comme une extension variable qui augmente toujours à rien.

Les noms de variables ne peuvent pas contenir d' =, accepter sans-papiers dynamique des variables comme l' %=ExitCode% et %=C:%. Pas de nom de variable peut jamais contenir un = après la 1ère position. Donc j'ai parfois l'utilisation de la suite pour inclure des commentaires dans une mise entre parenthèses de bloc:

::This comment hack is not always safe within parentheses.
(
  %= This comment hack is always safe, even within parentheses =%
)

C'est aussi une bonne méthode pour intégrer les commentaires en ligne

dir junk >nul 2>&1 && %= If found =% echo found || %= else =% echo not found

Le premier = n'est pas nécessaire, mais j'ai comme si, pour la symétrie.

Il y a deux restrictions:

1) le commentaire ne peut pas contenir de %

2) le commentaire ne peut pas contenir de :

27voto

James K Points 1893

Après, j'ai réalisé que je pouvais utiliser l'étiquette :: de faire des commentaires et commentaire du code REM juste regardé laid pour moi. Comme il a été mentionné le double deux-points peuvent causer des problèmes lorsqu'il est utilisé dans () bloqué le code, mais j'ai découvert un travail autour de l'alternance entre les étiquettes :: et :de l'espace

:: This, of course, does
:: not cause errors.

(
  :: But
   : neither
  :: does
   : this.
)

Ce n'est pas laid comme REM, et en fait il ajoute un peu de style à votre code.

Donc, en dehors des blocs de code j'utilise :: et à l'intérieur j'alterne :: et :.

Par ailleurs, pour le grand tas de commentaires, comme dans l'en-tête de votre fichier de commandes, vous pouvez éviter des commandes spéciales et des personnages complètement simplement en gotoing sur vos commentaires. Cela vous permet d'utiliser n'importe quelle méthode ou le style de balisage que vous voulez, malgré le fait que, si CMD jamais réellement essayé de processus de ces lignes, il faudrait jeter un hissy.

@echo off
goto :TopOfCode

=======================================================================
COOLCODE.BAT

Useage:
  COOLCODE [/?] | [ [/a][/c:[##][a][b][c]] INPUTFILE OUTPUTFILE ]

Switches:
       /?    - This menu
       /a    - Some option
       /c:## - Where ## is which line number to begin the processing at.
         :a  - Some optional method of processing
         :b  - A third option for processing
         :c  - A forth option
  INPUTFILE  - The file to process.
  OUTPUTFILE - Store results here.

 Notes:
   Bla bla bla.

:TopOfCode
CODE
.
.
.

Utiliser ce que jamais la notation que vous souhaitez *', @s'etc.

3voto

Darin Points 11

James K, je suis désolé je me suis trompé dans la juste part de ce que j'ai dit. Le test que j'ai fait est le suivant:

@ECHO OFF
(
  :: But
   : neither
  :: does
   : this
  :: also.
)

Cela répond à votre description de l'alternance, mais échoue avec un ") était inattendu en ce moment." message d'erreur.

J'ai fait un peu plus loin les tests aujourd'hui et a constaté que l'alternance n'est pas la clé, mais il semble que la clé est d'avoir un même nombre de lignes, de ne pas en avoir deux lignes dans une ligne de départ avec double deux-points (::) et pas de fin en double deux-points. Considérez les points suivants:

@ECHO OFF
(
   : But
   : neither
   : does
   : this
   : cause
   : problems.
)

Cela fonctionne!

Mais aussi, considérez ceci:

@ECHO OFF
(
   : Test1
   : Test2
   : Test3
   : Test4
   : Test5
   ECHO.
)

La règle d'avoir un même nombre de commentaires ne semble pas à s'appliquer quand la fin de la commande.

Malheureusement, c'est juste écureuils assez que je ne suis pas sûr que je veux l'utiliser.

Vraiment, la solution la meilleure et la plus sûre que je peux penser, c'est que si un logiciel comme Notepad++ s'lire REM double deux-points, puis d'écrire le double deux-points arrière comme REM états lorsque le fichier est enregistré. Mais je ne suis pas au courant d'un tel programme et je ne suis pas au courant de tous les plugins pour Notepad++ qui ne qui soit.

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