Automaticamente extrai e renomeia o arquivo extraído de acordo com o nome do arquivo

3

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 Carrie 27.02.2013 / 21:04

3 respostas

0

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.

    
por 27.02.2013 / 21:35
0

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).

    
por 11.04.2015 / 23:22
-1
forfiles /M *.zip /C "cmd /c C:\PROGRA~1-Zipz.exe e @file & ren exp_1.txt @fname.txt"
    
por 11.04.2015 / 19:03