Extraiga y cambie automáticamente el nombre del archivo extraído según el nombre del archivo

Extraiga y cambie automáticamente el nombre del archivo extraído según el nombre del archivo

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.txtarchivo en el mismo directorio que el archivo zip, pero no puedo averiguar cómo cambiarle el nombre exp_1.txtpara que coincida con el nombre del archivo zip del que se extrajo.

Una vez más, en menos palabras: quiero TuesdayReport.zipextraer el único archivo exp_1.txty cambiarle el nombre TuesdayReport.txtal mismo directorio que TuesdayReport.zip.

Actualmente estoy usando 7z xpara 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.txtde cada archivo zip en el directorio actual con el mismo nombre que el archivo zip pero en txtlugar de zipla 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:

  • forbucle enumera cada archivo zip
  • La primera 7zinvocación junto con findstrse asegura de que se ejecute el extracto/un archivo solo se genera si el archivo contiene un archivo en particular.
  • La segunda 7zinvocación en realidad extrae el archivo a la salida estándar ( -soswitch) y redirige la salida estándar al archivo con el mismo nombre que el archivo (menos la extensión). El %~nmodificador 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).

información relacionada