J’ai récemment ajouté 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 fonctionnerait bien sur une ligne de commande, mais pas sur le fichier. Lorsque je suis passé à %% f, cela a fonctionné dans le fichier. Je me demande quelle est la différence.
(Une explication plus détaillée peut être trouvée dans un article archivé de Microsoft KB .)
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 batch, la 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 au %
avec un deuxième %
:
FOR /f %%f in ('dir /b .') DO somecommand %%f
Sous DOS, vous ne pouviez pas utiliser les variables d’environnement sur la ligne de commande, uniquement dans les fichiers de commandes, où ils utilisaient le signe %
comme délimiteur. Si vous souhaitez un signe %
littéral dans un fichier de commandes, par exemple dans une déclaration echo
, vous devez le doubler.
Cela a été transféré à Windows NT qui autorisait les variables d’environnement sur la ligne de commande, mais pour la compatibilité ascendante, vous devez toujours doubler vos signes %
dans un fichier .cmd.