Ниже приведен сценарий, который я использовал в прошлом для аналогичной задачи со 100% -ным успехом, это чистый пакет с 7Zip, где вы можете явно указать исходный каталог, где это может быть буква диска или папка.
Это также позволяет вам явно указать начальный корневой временный каталог, а затем создать в нем новую папку, соответствующую имени zip-файла, за вычетом расширения zip, а затем удалить его после завершения операций архивирования 7Zip для каждого zip-файла, для которого /F цикл повторяется и обрабатывается.
скрипт
Вы просто устанавливаете значения переменных Src=
, ExtractDir=
и z7=
чтобы они были в вашей среде в верхней части скрипта, а остальные просто будут работать.
Вы можете указать любые методы сжатия 7Zip, которые вам нужны, в конце команды %z7% a ~
сразу после -aoa
например -aoa -m<method_parameters>
для ваших нужд.
Однако для запуска в виде пакетного сценария сохраните логику в текстовом документе на рабочем столе и т.д. Как <something>.cmd
из файла текстового документа | сохранить параметры. После сохранения просто дважды щелкните по нему, чтобы выполнить логику (или щелкните правой кнопкой мыши запуск от имени администратора) и подтвердите, что файлы были обработаны, как и ожидалось, впоследствии.
@ECHO ON
SET Src=X:\
SET ExtractDir=%Src%\tmpExtract007
SET z7="C:\Program Files\7-Zip\7z.exe"
FOR /F "usebackq tokens=*" %%a IN (`DIR /S /B /A-D "%Src%\*.zip"`) DO (
IF NOT EXIST "%ExtractDir%\%%~Na" MD "%ExtractDir%\%%~Na"
ECHO A | %z7% e "%%~Fa" -o"%ExtractDir%\%%~Na" -r
%z7% a "%%~Fa" "%ExtractDir%\%%~Na\*" -aoa
RD /Q /S "%ExtractDir%\%%~Na"
)
PAUSE
EXIT
Пожалуйста, обратите внимание на ECHO A |
перед командой %z7% e ~
чтобы сказать ей перезаписывать любые существующие файлы, которые существуют в каталоге out, вместо того, чтобы ждать, пока вы скажете ей сделать это, и т. д.
Также обратите внимание на использование -aoa
в конце команды %z7% a ~
которая говорит, что нужно перезаписать все существующие файлы внутри zip-файла, который вы заархивируете, чтобы заменить все исходные файлы внутри него без фактического удаления всего оригинала. Заранее запустите zip-файл, который очень просто добавить к этому сценарию, если нужно с помощью одной дополнительной строки IF EXIST "%%~Fa" DEL /Q /F "%%~Fa"
.
Дополнительные ресурсы
- 7Zip
- Для /F
For /?
%~fI - expands %I to a fully qualified path name
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
Dir