Что означает знак процента (% и %%) в аргументе пакетного файла?

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на текущую запись, которую мы обрабатываем.

Скотт Чемберлен
источник
Просто чтобы придираться - / D в цикле for будет ограничивать подстановочный знак * каталогами, а не «каждым файлом в этой папке и каждой подпапкой» (при условии, что расширения команд включены).
Эрни
@ernie вы правы, я смотрел переключатель / R на странице справки, я исправил свой ответ.
Скотт Чемберлен
Спасибо вам за это, это показывает, насколько это кажется нубистским, но это довольно архаичные вещи, для которых мне нужно копаться в паре онлайн руководств.
Джим Кигер
0

Это переменная.

В этом конкретном примере используется параметр каталога цикла FOR , который выполняет итерацию по каталогам и присваивает их %% A.

Это также не пример командной строки, а пример пакетного файла. В пакетных файлах вам нужно использовать %% A, а в командной строке вы просто используете% A.

Эрни
источник
0

В вашем сценарии %% A является заполнителем для того, что повторяет цикл for (который / D указывает на каталоги). Таким образом, на каждой итерации цикла %% A является одним из каталогов.

Вы увидите %% вместо% в коде пакета. В командной строке вы увидите% вместо %%.

Так что знайте, что если вы скопируете код командного файла в командную строку и запустите его с использованием %%, произойдет ошибка, и наоборот.

Mechaflash
источник