Que signifie le signe pourcentage (% et %%) dans un argument de fichier de commandes?

11

Je pense que je manque quelque chose parce que je n'arrive pas à trouver ce que cela signifie.

Exemple:

for /D %%A in (*) do "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"

Cette ligne était censée utiliser une version en ligne de commande de 7zippour compresser des dossiers individuels, mais je suis perplexe quant à ce que %%Asignifie dans ce contexte.

Jim Kieger
la source
1
La ligne de commande et le fichier de bain sont confus. Changé le signe en haut.
Jim Kieger

Réponses:

12

La forcommande a besoin d'un espace réservé pour que vous puissiez transmettre des variables pour une utilisation ultérieure dans la requête, nous lui disons d'utiliser l'espace réservé %A, la raison pour laquelle le code que vous avez vu %%Aest dû au fait que dans un fichier de commandes (qui, je suppose, est l'endroit où vous l'avez trouvé), le %a une signification particulière, vous devez donc le faire deux fois %%pour qu'il soit transformé en un seul %pour être passé à la forcommande

Pour séparer réellement ce que fait la commande, la commande comporte deux parties:

 for /D %%A in (*) do .....

Ce que cette partie dit est que pour chaque dossier du dossier en cours, exécutez la commande suivante en remplaçant %%Apar le nom du dossier en cours de traitement.

..... "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"

Ce que cette partie dit est d'exécuter la commande "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"et de remplacer les deux %%Apar l'enregistrement actuel que nous traitons.

Scott Chamberlain
la source
Juste pour taper - le / D sur la boucle for limitera le caractère générique * aux répertoires, pas à "chaque fichier dans ce dossier et chaque sous-dossier" (en supposant que les extensions de commande sont activées).
ernie
@ernie vous avez raison, je regardais le commutateur / R sur la page d'aide, j'ai corrigé ma réponse.
Scott Chamberlain
Merci pour cela, cela montre à quel point cela semble noobish, mais c'est des trucs assez archaïques pour lesquels je dois fouiller dans quelques manuels en ligne.
Jim Kieger
0

C'est une variable.

Cet exemple particulier utilise l' option de répertoire d'une boucle FOR , parcourant les répertoires et les affectant à %% A.

Ce n'est pas non plus un exemple de ligne de commande, mais un exemple de fichier de commandes. Dans les fichiers batch, vous devez utiliser %% A, tandis que sur la ligne de commande, vous utiliserez simplement% A.

ernie
la source
0

Dans votre scénario, le %% A est un espace réservé pour ce que la boucle "for" itère (sur lequel / D indique les répertoires). Ainsi, à chaque itération de la boucle, %% A est l'un des répertoires.

Vous verrez %% au lieu de% dans le code de lot. Vous verrez% au lieu de %% utilisé dans votre invite de commande.

Sachez donc que si vous copiez un code de fichier de commandes dans une invite de commande et l'exécutez avec %% en cours d'utilisation, cela provoquera une erreur et vice versa.

Mechaflash
la source