105 votes

Quelle est la différence entre % et %% dans un fichier cmd ?

J'ai récemment inclus une ligne similaire à celle-ci dans un fichier .cmd :

for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"

À l'origine, je n'avais utilisé que %f, et cela fonctionnait bien lorsqu'il était exécuté en ligne de commande, mais pas lorsqu'il était exécuté dans le fichier. Lorsque je suis passé à %%f, cela a fonctionné dans le fichier. Je me demande juste quelle est la différence.

164voto

marapet Points 19796

(Une explication plus détaillée peut être trouvée dans un article archivé de Microsoft KB .)

Trois choses à savoir :

  1. Le signe pour cent est utilisé dans les fichiers batch pour représenter les paramètres de la ligne de commande : %1 , %2 , ...

  2. Deux pourcentages avec n'importe quel caractère entre eux sont interprétés comme une variable :

    echo %myvar%

  3. Deux pour cent de signes sans tout ce qui se trouve entre les deux (dans un fichier batch) est traité comme un seul signe de pourcentage dans une commande (pas un fichier batch) : %%f


Pourquoi ça ?

Par exemple, si nous exécutons votre ligne de commande (simplifiée)

FOR /f %f in ('dir /b .') DO somecommand %f

dans un fichier batch, règle 2 tenterait d'interpréter

%f in ('dir /b .') DO somecommand %

comme une variable. Afin d'empêcher cela, vous devez appliquer règle 3 et échapper à la % avec un second % :

FOR /f %%f in ('dir /b .') DO somecommand %%f

18voto

Neil Points 24938

Sous DOS, vous ne pouviez pas utiliser de variables d'environnement sur la ligne de commande, mais uniquement dans les fichiers de traitement par lots, où l'on utilisait la fonction % comme délimiteur. Si vous vouliez un % dans un fichier batch, par exemple dans une echo déclaration, vous deviez la doubler.

Cela a été repris par Windows NT qui autorise les variables d'environnement sur la ligne de commande, mais pour des raisons de rétrocompatibilité, vous devez toujours doubler la valeur de votre paramètre % dans un fichier .cmd.

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