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.txt
arquivo no mesmo diretório do arquivo zip, mas não consigo descobrir a renomeação exp_1.txt
para corresponder ao nome do arquivo zip do qual foi extraído.
Mais uma vez em menos palavras: de TuesdayReport.zip
quero extrair o único arquivo exp_1.txt
e renomeá-lo para TuesdayReport.txt
o 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 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.txt
de cada arquivo zip no diretório atual com o mesmo nome do arquivo zip, mas com extensão txt
em 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:
for
loop enumera todos os arquivos zip- a primeira
7z
invocação efindstr
garante que a extração seja executada/um arquivo só será produzido se o arquivo contiver um arquivo específico - a segunda
7z
invocação, na verdade, extrai o arquivo para a saída padrão (-so
switch) e redireciona o stdout para um arquivo com o mesmo nome de arquivo (menos a extensão). O%~n
modificador 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).