Isso extrairá o arquivo chamado exp_1.txt
de cada arquivo zip no diretório atual com o mesmo nome do arquivo zip, mas com txt
em vez de zip
extension:
for %a in (*.zip) do @(7z l "%~a" -ir!exp_1.txt |findstr exp_1.txt) && 7z e "%~a" -ir!exp_1.txt -so >"%~na.txt"
Isso deve ser executado diretamente a partir da linha de comando. Se você quiser executá-lo a partir do lote, precisará duplicar %
O que faz:
-
for
loop enumera cada arquivo zip
- primeira
7z
invocação junto com findstr
garante que a extração seja executada / um arquivo será produzido apenas se o archive contiver arquivo específico
- segundo
7z
invocation na verdade extrai o arquivo para a saída padrão ( -so
switch) e redireciona stdout para o arquivo com o mesmo nome de archive (menos extensão). O modificador %~n
instrui o cmd a obter apenas o nome base (sem extensão)
Por favor, note que se houver mais de um arquivo no arquivo com o mesmo nome (em diretórios diferentes), ele poderá produzir resultados inesperados.
Se você colocá-lo em lote, eu também sugiro definir o nome do arquivo como variável ( antes do loop ) para evitar erros relacionados à repetição (você precisa digitar 3 vezes no comando acima).