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.
(Vous trouverez des explications plus détaillées dans n article archivé de la Base de connaissances de Microsoft .)
Trois choses à savoir:
%1
, %2
, ...Deux signes de pourcentage avec des caractères entre eux sont interprétés comme une variable:
echo %myvar%
%%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
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.