Batch Как извлечь несколько zip-файлов в их исходную папку с помощью 7zip? - PullRequest
0 голосов
/ 05 июля 2018

У меня есть несколько zip-файлов в разных папках, и я хочу извлечь их в папку, в которой они находятся.

Parent Folder
    -Folderwithzip1
        --zip1
        --[Content from zip1 should land here]
    -Folderwithzip2
        --zip2
        --[Content from zip2 should land here]

Я пробовал

for /r "C:\zip" %f in (*.zip) do do 7z x -o "%~dpf" "%f"

Я тоже пробовал

FOR /F "USEBACKQ tokens=*" %%F IN (`DIR /b *.zip`) DO ("C:\Program Files\7-Zip\7z.exe" e "%%F" -y)

но это только извлекает файлы в папке, где находится пакетный файл.

Но партия даже не запускается.

1 Ответ

0 голосов
/ 05 июля 2018

В командной строке дважды содержится ключевое слово 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-файлы с полным путем вместо только имени файла.

...