В командной строке дважды содержится ключевое слово do
, которое является первой ошибкой.
Вторая ошибка - пробел между -o
и "%~dpf"
.
Справка 7-Zip - это файл 7zip.chm
в папке программных файлов 7-Zip , который можно открыть из 7-Zip или двойным щелчком по этому файлу. Есть на вкладке Содержание элемент списка Версия командной строки с элементом подсписка Переключатели , содержащие ссылку на переключатель -o (установить каталог вывода) . Синтаксис, описанный на этой странице справки, а также примеры не имеют пробела между ключом -o
и путем к каталогу.
7-Zip также выводит соответствующее сообщение об ошибке при выполнении с пробелом между -o
и путем к выходному каталогу:
Ошибка командной строки:
Слишком короткий переключатель:
-о
Таким образом, решение довольно просто для использования в командной строке:
for /R "C:\zip" %I in (*.zip) do "C:\Program Files\7-Zip\7z.exe" x -o"%~dpI" -y -- "%I"
А для использования в пакетном файле каждый знак процента экранирован с еще одним знаком процента:
for /R "C:\zip" %%I in (*.zip) do "C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" -y -- "%%I"
Я предлагаю также запустить в окне командной строки for /?
и прочитать вывод справки для команды FOR .
DIR здесь не требуется, за исключением того, что существуют * .zip-файлы со скрытым набором атрибутов, которые всегда игнорируются FOR или некоторые из ZIP-файлов содержат * .zip-файлы. и следует избегать извлечения этих * .zip файлов при запуске командного файла. Запустите в окне командной строки dir /?
для получения справки по команде DIR .
Следующая командная строка может использоваться в командном файле для первого запуска команды DIR в отдельном командном процессе, запущенном FOR с использованием cmd /C
, захватывать все, что написано DIR для обработки STDOUT , а затем построчно обрабатывать все захваченные строки (= полные имена файлов):
for /F "delims=" %%I in ('dir "C:\zip\*.zip" /A-D /B /S 2^>nul') do "C:\Program Files\7-Zip\7z.exe" x -o"%%~dpI" -y -- "%%I"
DIR опция /S
требуется здесь, чтобы позволить DIR искать также во всех подкаталогах C:\zip
для * .zip файлов и получать вывод имени найденного *. ZIP-файлы с полным путем вместо только имени файла.