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
заявление.
Надеюсь это поможет!