7-zip -xr! *. bat está criando um arquivo vazio com o nome do arquivo em lote

1

Estou tentando excluir arquivos de um lote de 7 zip.

A sintaxe é:

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

O comando está criando arquivos zip de todos os arquivos na pasta, incluindo os arquivos *.bat , mas os arquivos *.bat.zip estão vazios.

Existe alguma maneira de impedir que os arquivos vazios sejam gerados?

    
por bjrmeno 31.03.2014 / 18:28

1 resposta

0

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!

    
por 31.03.2014 / 19:41