Пакетное извлечение файлов из каждого архива с 7-Zip

4694
Rayearth

Я хочу использовать этот код в пакете. Первый шаг - ввести исходную папку, дерево которой будет выглядеть так:

enter image description here

Чего я хочу добиться - это извлечь каждый тип архива в исходной папке в ту же папку, где находится архив, например. "archive.zip" непосредственно в "folder1".

Имейте этот код ниже, но не знаете, как установить переменную назначения.

SET /P "source="  FOR %%F IN ("%source%\*.zip") DO "C:\Program Files\7-Zip\7z.exe" x "%source%\%%~nF.zip" FOR %%F IN ("%source%\*.7z") DO "C:\Program Files\7-Zip\7z.exe" x "%source%\%%~nF.7z" FOR %%F IN ("%source%\*.rar") DO "C:\Program Files\7-Zip\7z.exe" x "%source%\%%~nF.rar" 
3
https://sevenzip.osdn.jp/chm/cmdline/commands/extract.htm iSR5 7 лет назад 0

1 ответ на вопрос

2
Pimp Juice IT

Рекурсивно извлечь из архива файлы с 7Zip в ту же папку, где находится архивный файл

Вы можете использовать -oпереключатель с 7Zip, который будет указывать полный путь к выходному каталогу для команды extract для извлечения содержимого применимых архивных файлов.

Вы можете использовать цикл FOR / F с рекурсивной командой DIR, чтобы перебрать полные пути к архивам и передать их в 7Zip соответственно, используя подстановки, чтобы заставить его работать так, как вам нужно.

Пакетный скрипт

@ECHO ON  SET source=C:\Users\User\Desktop\Test FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.zip"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"%%~pF\" FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.7z"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"%%~pF\" FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.rar"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"%%~pF\" EXIT 

Дополнительные ресурсы

  • DIR
  • FOR / F

    Кроме того, была улучшена замена ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:

    %~I - expands %I removing any surrounding quotes (") %~fI - expands %I to a fully qualified path name %~dI - expands %I to a drive letter only %~pI - expands %I to a path only %~nI - expands %I to a file name only %~xI - expands %I to a file extension only %~sI - expanded path contains short names only %~aI - expands %I to file attributes of file %~tI - expands %I to date/time of file %~zI - expands %I to size of file %~$PATH:I - searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string 
Конечно, это работает безупречно - большое спасибо за объяснение того, как подойти к этой проблеме. КСТАТИ. Есть ли у вас какие-либо идеи, почему 7-Zip-переключатели -y (предположим, да на все запросы) и -aoa (перезаписать все существующие файлы без приглашения) не работают, и меня каждый раз спрашивают, что делать, когда есть имя файла конфликт? Rayearth 7 лет назад 0

Похожие вопросы