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.



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.


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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.