Tengo un montón de archivos zip en una carpeta. Cada archivo zip tiene un archivo llamado exp_1.txt
. Me gustaría descomprimir cada archivo zip y cambiar el nombre del archivo extraído de cada archivo zip al nombre del archivo zip.
Los nombres de los archivos zip no siguen ningún patrón ni estructura de fechas, pero son todos diferentes. He descubierto cómo extraer el exp_1.txt
archivo en el mismo directorio que el archivo zip, pero no puedo averiguar cómo cambiarle el nombre exp_1.txt
para que coincida con el nombre del archivo zip del que se extrajo.
Una vez más, en menos palabras: quiero TuesdayReport.zip
extraer el único archivo exp_1.txt
y cambiarle el nombre TuesdayReport.txt
al mismo directorio que TuesdayReport.zip
.
Actualmente estoy usando 7z x
para extraer el archivo al mismo directorio en el que se encuentra el archivo zip. Preferiría poder ejecutar esto desde un archivo por lotes.
Respuesta1
¿Por qué no utilizar la edición de línea de comandos 7zip, que puedes descargar desdeaquí?
Dentro de este archivo zip puede encontrar un archivo de ayuda en formato CHm que tiene todos los modificadores y comandos que pueden ayudarle durante el proceso por lotes.
Respuesta2
forfiles /M *.zip /C "cmd /c C:\PROGRA~1\7-Zip\7z.exe e @file & ren exp_1.txt @fname.txt"
Respuesta3
Esto extraerá el archivo nombrado exp_1.txt
de cada archivo zip en el directorio actual con el mismo nombre que el archivo zip pero en txt
lugar de zip
la extensión:
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"
Esto debe ejecutarse directamente desde la línea de comandos; si desea ejecutarlo desde un lote, necesitará duplicar%
Que hace:
for
bucle enumera cada archivo zip- La primera
7z
invocación junto confindstr
se asegura de que se ejecute el extracto/un archivo solo se genera si el archivo contiene un archivo en particular. - La segunda
7z
invocación en realidad extrae el archivo a la salida estándar (-so
switch) y redirige la salida estándar al archivo con el mismo nombre que el archivo (menos la extensión). El%~n
modificador le indica a cmd que tome solo el nombre base (sin extensión)
Tenga en cuenta que si hay más de un archivo en el archivo con el mismo nombre (en diferentes directorios), puede producir resultados inesperados.
Si lo pones en lotes, también sugeriría establecer el nombre del archivo como variable (antes del bucle) para evitar errores relacionados con la repetición (debe ingresarlo 3 veces en el comando anterior).