7-zip -xr!*. Bat создает пустой архив с именем пакетных файлов

Я пытаюсь исключить файлы из пакета с 7 почтовыми индексами.

Синтаксис:

for %%A in (*) do "C:\Program Files\7-Zip\7z.exe" a -tzip -xr!*.docx "%%A.zip" "%%A" -xr!*.bat

Команда создает zip-файлы всех файлов в папке, включая *.bat файлы, кроме *.bat.zip файлы пусты.

Есть ли способ остановить создание пустых файлов?

1 ответ

Во-первых, я предполагаю, что есть *.* в скобках, и что вы генерируете один почтовый индекс на входной файл. Если это не так, вам может потребоваться изменить ниже. Я опустел .bat.zip файлы, использующие:

for %%A in (*.*) do "C:\Program Files\7-Zip\7z.exe" a -tzip -xr!.docx "%%A.zip" "%%A" -xr!*.bat

7-zip создает архив перед добавлением файлов, поэтому вы получаете пустой архив, даже если в него ничего не входит. Чтобы это исправить, проверьте файл перед добавлением в архив:

@echo off
for %%A in (*.*) do call :doit "%%A"
goto end

:doit
if "%~x1"==".bat" goto :eof
if "%~x1"==".docx" goto :eof
if "%~x1"==".zip" goto :eof
"C:\Program Files\7-Zip\7z.exe" a -tzip %1.zip %1 
goto :eof

:end

(проверено на Windows 7).

for цикл теперь вызывает подпрограмму "doit", которая начинается с :doit ярлык и выход на любой goto :eof команда. goto end после for цикл просто перепрыгивает через подпрограмму для чистого выхода.

if заявления исключают файлы, которые вы не хотите архивировать. %1 имя файла для проверки, и %~x1 это его расширение. Если расширение нежелательно, goto :eof возвращается к for петля и 7-почтовый никогда не называется.

Команда 7-zip больше не имеет -x флаги, так как вы знаете, что имя файла хорошо, когда вы нажимаете 7z командной строки. Там нет кавычек вокруг %1 так как это уже было указано в call заявление.

Надеюсь это поможет!

Другие вопросы по тегам