Primeiro, presumo que haja um *.*
nos parênteses e que você esteja gerando um arquivo zip por entrada. Se esse não for o caso, talvez seja necessário alterar o abaixo. Eu tenho arquivos .bat.zip
vazios usando:
for %%A in (*.*) do "C:\Program Files-Zipz.exe" a -tzip -xr!.docx "%%A.zip" "%%A" -xr!*.bat
O 7-zip cria o arquivo antes de adicionar arquivos, então você obtém um arquivo vazio, mesmo que nada vá para ele. Para corrigir isso, verifique o arquivo antes de adicioná-lo a um arquivo:
@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-Zipz.exe" a -tzip %1.zip %1
goto :eof
:end
(testado no Windows 7).
O loop for
agora chama a sub-rotina "doit", que começa no rótulo :doit
e sai em qualquer comando goto :eof
. O goto end
após o loop for
simplesmente salta sobre a sub-rotina para uma saída limpa.
As declarações if
excluem os arquivos que você não deseja arquivar. %1
é o nome do arquivo a ser testado e %~x1
é sua extensão. Se a extensão não for desejada, goto :eof
retornará ao loop for
e o 7-zip nunca será chamado.
O comando 7-zip não tem mais as bandeiras -x
, pois você sabe que o nome do arquivo é bom quando você clica na linha de comando 7z. Não há citações em torno do %1
, já que ele já foi citado na declaração call
.
Espero que isso ajude!