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

1915
bjrmeno

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

First, I assume there's a *.* in the parentheses, and that you are generating one zip per input file. If that's not the case, you might need to change the below. I got empty .bat.zip files using:

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

7-zip creates the archive before adding files, so you get an empty archive even if nothing is going to go into it. To fix that, check the file before adding it to an archive:

@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 

(tested on Windows 7).

The for loop now calls the "doit" subroutine, which starts at the :doit label and exits on any goto :eof command. The goto end after the for loop just jumps over the subroutine for a clean exit.

The if statements exclude the files you don't want archived. %1 is the filename to test, and %~x1 is its extension. If the extension is undesired, goto :eof returns to the for loop and 7-zip is never called.

The 7-zip command no longer has the -x flags, since you know the filename is good when you hit the 7z command line. There are no quotes around the %1 since it was already quoted in the call statement.

Hope this helps!

При выполнении теста `if` для расширения файла в подпрограмме я бы добавил флаг` / i`, чтобы игнорировать регистр. В противном случае файлы, имеющие расширения со смешанным или заглавными буквами, будут добавлены в zip. JSanchez 10 лет назад 0
Спасибо за информацию. Я попробую это. Что касается / я, я понятия не имею, где его поставить. Это все для меня в новинку, и я пытался понять программу, поэтому я знаю, что она делает. Есть ли кто-нибудь, кто сможет интерпретировать происходящее? У меня есть пакет, который заархивирует файлы в папке, а затем заархивирует вложенные папки в отдельные файлы, чтобы я мог легко управлять архивом с защитой и шифрованием PW. Единственные проблемы, с которыми я столкнулся, - это исключения и выяснение того, как создать файлы в папке "d: \ testfolder". bjrmeno 10 лет назад 0
Это синтаксис моей партии ... для %% i IN (*. *) DO d: \ portable \ 7z \ 7za.exe -t7z a -mx9 -pPASSWORD "%% ~ i.7z" "%% i "пауза для / d %% X в (*) do" d: \ portable \ 7z \ 7za.exe "-t7z a -mx9 -pPASSWORD" %% X.7z "" %% X \ pause Я ставлю паузы так что я мог просматривать сообщения и ошибки после его запуска. Все еще работаю над разметкой. Я не понимаю, что происходит. Если бы кто-то мог сломать сценарий для меня, я бы оценил его. Кстати, я знаю, что -mx9 и -t7z -p делают, но это все. Я пришел сюда, потому что большая часть информации о командной строке, которую я нашел, была здесь. Любой hlp был бы признателен. MP bjrmeno 10 лет назад 0

Похожие вопросы