por que não usar a edição de linha de comando do 7zip, que você pode baixar em aqui ?
dentro deste arquivo zip você pode encontrar um arquivo de ajuda no formato CHm que tem todos os switches e comandos que podem ajudá-lo durante o processo em lote.
Eu tenho um monte de arquivos zip em uma pasta. Cada arquivo zip tem um arquivo chamado exp_1.txt . Eu gostaria de descompactar cada arquivo zip e renomear o arquivo extraído de cada arquivo zip para o nome do arquivo zip.
Os nomes dos arquivos zip não seguem nenhum padrão ou estrutura de datas, mas são todos diferentes. Eu descobri como obter o arquivo exp_1.txt extraído para o mesmo diretório que o arquivo zip, mas não consigo descobrir a renomeação de exp_1.txt para combinar com o nome do qual o arquivo zip foi extraído.
Mais uma vez em poucas palavras: de TuesdayReport.zip , quero extrair o único arquivo exp_1.txt e renomeá-lo para TuesdayReport.txt no mesmo diretório que TuesdayReport.zip .
Atualmente, estou usando 7z x para extrair o arquivo para o mesmo diretório em que o arquivo zip está localizado. Eu preferiria poder executá-lo a partir de um arquivo em lotes.
por que não usar a edição de linha de comando do 7zip, que você pode baixar em aqui ?
dentro deste arquivo zip você pode encontrar um arquivo de ajuda no formato CHm que tem todos os switches e comandos que podem ajudá-lo durante o processo em lote.
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 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 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).
forfiles /M *.zip /C "cmd /c C:\PROGRA~1-Zipz.exe e @file & ren exp_1.txt @fname.txt"
Tags command-line windows-7 7-zip