1

Я пытаюсь исключить файлы из пакета с 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 ответ1

0

Во-первых, я предполагаю, что в скобках есть *.* , И вы генерируете один zip на каждый входной файл. Если это не так, вам может потребоваться изменить ниже. Я получил пустые файлы .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-zip никогда не вызывается.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .