web-dev-qa-db-fra.com

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'utilisais que% f, et cela fonctionnerait correctement s'il était exécuté en ligne de commande, mais pas dans le fichier. Quand je suis passé à %% f, cela a fonctionné dans le fichier. Je me demandais simplement quelle était la différence.

69
Tyler

(Vous trouverez des explications plus détaillées dans n article archivé de la Base de connaissances de Microsoft .)

Trois choses à savoir:

  1. Le signe de pourcentage est utilisé dans les fichiers de commandes pour représenter les paramètres de ligne de commande: %1, %2, ...
  2. Deux signes de pourcentage avec des caractères entre eux sont interprétés comme une variable:

    echo %myvar%

  3. Deux signes de pourcentage sans rien entre (dans un fichier de traitement par lots) sont traités comme un signe de pourcentage unique dans une commande (pas un fichier de traitement par lots): %%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 de commandes, règle 2 essaierait d'interpréter

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

en tant que variable. Pour éviter cela, vous devez appliquer la règle 3 et échapper à la % avec une seconde %:

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

Sous DOS, vous ne pouviez pas utiliser de variables d’environnement sur la ligne de commande, mais uniquement dans des fichiers de traitement par lots, où ils utilisaient le % signez comme un délimiteur. Si vous vouliez un littéral % vous connecter à un fichier de commandes, par exemple dans une instruction echo, il fallait la doubler.

Ceci est reporté sur Windows NT, ce qui autorise les variables d’environnement sur la ligne de commande. Toutefois, pour assurer la compatibilité ascendante, vous devez toujours doubler votre % signe dans un fichier .cmd.

12
Neil