7z: comprime archivos en un subdirectorio, nómbralos para la carpeta principal

7z: comprime archivos en un subdirectorio, nómbralos para la carpeta principal

Estoy intentando comprimir una estructura de carpetas así:

Root
 |_ Folder
      |_Sub Folder 1
          |_Files
      |_Sub Folder 2
          |_Files
      |_ *more Sub Folders*

Necesito crear un archivo .zip para cada subcarpeta que contenga los archivos dentro de la subcarpeta y deba tener el nombre de la subcarpeta. Entonces, si ejecuto el comando dentro de "Carpeta", obtendría un archivo zip con el nombre de cada subcarpeta, con el contenido de la subcarpeta únicamente (no la subcarpeta simplemente comprimida).

Probé varios comandos for en Windows usando 7-zip pero parece que no puedo entenderlos.

for /d %i in (*) do 7z a -oC:\Temp... %i.zip

Eso simplemente comprime todo el contenido de la carpeta y crea un archivo para cada nombre de subcarpeta.

¡Aprecio cualquier ayuda que puedas brindar!

Respuesta1

La forma más sencilla es instalar TotalCommander (desde el sitio de ghisler), seleccionar los subdirectorios deseados (puede usar * en el teclado numérico para alternar todos). Acceso directo Alt-F5 a compresores. Marque "Crear archivos separados, uno por archivo/dir seleccionado", seleccione el compresor deseado y haga clic en Aceptar.

En un lote puedes usar:

@echo off
for /d %%i in (*) do (
    echo Compressing %%i
  7z a "C:\TEMP\%%i.7z" -r "%%i\*.*"
)

O en una línea CMD:

for /d %i in (*) do  7z a "C:\TEMP\%i.7z" -r "%i\*.*"

Respuesta2

También puedes usar Powershell:

Get-ChildItem -Path "C:\Root\Folder" -Force -Directory -ErrorAction Continue | foreach {Start-Process "C:\Program Files\7-Zip\7z.exe" -ArgumentList "a C:\TEMP\$_.7z -r $($_.FullName)\*.*"}

información relacionada