Extraia e renomeie automaticamente o arquivo extraído de acordo com o nome do arquivo

Extraia e renomeie automaticamente o arquivo extraído de acordo com o nome do arquivo

Eu tenho vários arquivos zip em uma pasta. Cada arquivo zip contém um arquivo chamado exp_1.txt. 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 data, mas são todos diferentes. Eu descobri como extrair o exp_1.txtarquivo no mesmo diretório do arquivo zip, mas não consigo descobrir a renomeação exp_1.txtpara corresponder ao nome do arquivo zip do qual foi extraído.

Mais uma vez em menos palavras: de TuesdayReport.zipquero extrair o único arquivo exp_1.txte renomeá-lo para TuesdayReport.txto mesmo diretório que TuesdayReport.zip.

Atualmente estou usando 7z xpara extrair o arquivo para o mesmo diretório em que o arquivo zip está localizado. Eu preferiria poder executar isso a partir de um arquivo em lote.

Responder1

por que não usar a edição de linha de comando 7zip, que você pode baixar emaqui?

dentro deste arquivo zip você pode encontrar um arquivo de ajuda no formato CHm que contém todas as opções e comandos que podem ajudá-lo durante o processo em lote.

Responder2

forfiles /M *.zip /C "cmd /c C:\PROGRA~1\7-Zip\7z.exe e @file & ren exp_1.txt @fname.txt"

Responder3

Isso extrairá o arquivo nomeado exp_1.txtde cada arquivo zip no diretório atual com o mesmo nome do arquivo zip, mas com extensão txtem vez de :zip

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 na linha de comando; se você quiser executá-lo em lote, precisará dobrar%

O que faz:

  • forloop enumera todos os arquivos zip
  • a primeira 7zinvocação e findstrgarante que a extração seja executada/um arquivo só será produzido se o arquivo contiver um arquivo específico
  • a segunda 7zinvocação, na verdade, extrai o arquivo para a saída padrão ( -soswitch) e redireciona o stdout para um arquivo com o mesmo nome de arquivo (menos a extensão). O %~nmodificador instrui o cmd a usar apenas o nome base (sem extensão)

Observe que se houver mais de um arquivo no arquivo com o mesmo nome (em diretórios diferentes), isso poderá produzir resultados inesperados.

Se você colocá-lo em lote, sugiro também definir o nome do arquivo como variável (antes do ciclo) para evitar erros relacionados à repetição (é necessário digitá-lo 3 vezes no comando acima).

informação relacionada