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