
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)\*.*"}