Що означає знак відсотка (% та %%) у аргументі пакетного файлу?


11

Я думаю, що мені чогось не вистачає, бо я не можу знайти, що це означає.

Приклад:

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

Цей рядок повинен був використовувати версію командного рядка 7zipдля стиснення окремих папок, але я натрапив на те, що %%Aозначає в цьому контексті.



1
Командний рядок та файл ванни заплутані. Змінив знак зверху.
Джим Кігер

Відповіді:


12

forКоманда потребує заповнювач , так що ви можете передати змінні для подальшого використання в запиті, ми говоримо , що використовувати заповнювач %A, причину код , який ви бачили використання %%Aвідбувається тому , всередині пакетного файлу (який я припускаю, де ви знайшли це) %має особливе значення, тому ви повинні зробити це двічі, %%щоб він перетворився на єдиний, %який буде переданий forкоманді

Щоб насправді розділити те, що робить команда, є дві частини для команди:

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

Що ця частина говорить, що для кожної папки в поточній папці виконайте наступну команду, замінюючи %%Aна ім'я поточно оброблюваної папки.

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

Що ця частина говорить, це виконати команду "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"та замінити два %%Aна поточний запис, який ми обробляємо.


Тільки до nitpick - / D у циклі for for обмежує * wildcard для каталогів, а не "кожен файл у цій папці та кожна підпапка" (припустимо, що розширення команд увімкнено).
ernie

@ernie, ти прав, я дивився перемикач / R на сторінці довідки, я виправив свою відповідь.
Скотт Чемберлен

Дякую за це, це показує, як це здається noobish, але це досить архаїчні речі, для яких я мушу перекопати пару онлайн-посібників.
Джим Кігер

0

Це змінна.

У цьому конкретному прикладі використовується параметр каталогу циклу FOR , ітерація через каталоги та присвоєння їм %% A.

Це також не приклад командного рядка, а приклад пакетного файлу. У пакетних файлах потрібно використовувати %% A, тоді як у командному рядку ви просто використовуєте% A.


0

У вашому сценарії %% A є заповнювачем для того, що цикл "для" перебирається (на що / D вказує каталоги). Отже, кожна ітерація циклу, %% A є одним із каталогів.

Ви побачите %% замість% у пакетному коді. Ви побачите% замість %%, який використовується у вашому командному рядку.

Тож знайте, що якщо ви скопіюєте пакетний код файлу в командний рядок і запускаєте його, використовуючи %%, він помилиться, і навпаки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.