Cómo hacer que 7-zip haga un montón de carpetas


18

Obtuve un montón de imágenes que tuve que recortar en 800x600 píxeles. Eso se hizo fácilmente, pero ahora tengo que subirlos para que la familia pueda verlos a todos.

La cosa es que esto es 500 MB en imágenes. Decidí simplemente comprimir las carpetas separadas, que contienen una cantidad casi igual de imágenes. De esta manera puedo subir un par cada día. Hacer esto manualmente es un trabajo muy largo y difícil. Me pregunto si hay una manera de hacer que 7-zip maneje cada carpeta individualmente.

Creo que necesitaré un archivo por lotes para hacerlo, pero no soy bueno con eso. Puse todo en una carpeta. En las diversas subcarpetas es donde se encuentran las imágenes. Lo que necesito es que el contenido de esa carpeta esté comprimido. No estoy seguro si puedo simplemente comprimir la carpeta junto con ella. Sé que PHP tiene un módulo zip, simplemente nunca he trabajado con él, por lo que no estoy seguro de si puede manejar el hecho de que el contenido del zip es una carpeta que contiene los elementos, en lugar de solo los elementos.


1
¿De cuántas carpetas estás hablando? 7? 147? Si no eres bueno con los archivos por lotes, pero tal vez esta sea una buena oportunidad para enfrentar ese desafío. :)
JMD

105 carpetas en total
KdgDev el

Respuestas:


25

Ejecutar desde un símbolo del sistema cuyo directorio de trabajo es su My Picturesdirectorio, este comando creará un archivo zip del contenido de cada subdirectorio, dejando todos los archivos zip en su My Picturesdirectorio.

Editar: he agregado las comillas necesarias para permitir directorios con espacios en sus nombres.

for /D %%d in (*.*) do 7z a -tzip "%%d.zip" "%%d"

Además: la siguiente versión no colocará archivos en un subdirectorio dentro del archivo zip, sino en su raíz:

for /D %%d in (*.*) do 7z a -tzip "%%d.zip" ".\%%d\*"

En Windows 7 y superior

for /D %d in (*.*) do 7z a -tzip "%d.zip" "%d"

o

for /D %d in (*.*) do 7z a -tzip "%d.zip" ".\%d\*"

Intenté agregar la carpeta 7-zip a mi classpath, pero no funcionará. Si uso toda la cadena para localizar el ejecutable en lugar de solo 7z, funciona. ¿Pensé que agregar esa cadena a la ruta de clase debería tener el mismo efecto?
KdgDev

Aquí classpathes donde Java busca clases y bibliotecas. google.com/search?q=classpath Aparentemente lo has confundido con el lugar pathdonde el shell busca ejecutables.
once81

Pregunta: el script funciona, pero no cuando hay espacios en el nombre de la carpeta ...
KdgDev

Gracias por la actualización. Con el segundo script, ¿quiere decir que el contenido del zip se "aplanará"?
KdgDev

66
Esto funcionó muy bien para mí, a pesar de que tenía que cambiar %%dpara %dque mi caja de Windows 7 se quejó el nombre var ser demasiado larga lanzando un "%% d fue inesperado en este momento" error.
Benjam

7

No pude hacer funcionar la línea de comando, en su lugar descargué WinRAR y mtone tenía razón: WinRAR tiene una opción para comprimir varias carpetas en sus propios archivos ZIP separados.

Por ejemplo, C:\Files\Fables 01en C:\Files\Fables 01.zipy C:\Files\Fables 02en C:\Files\Fables 02.zip.

Con WinRAR, abra la carpeta que contiene las carpetas que desea comprimir, luego siga estos pasos:

  • Seleccione todas las carpetas que desea comprimir / clasificar
  • Haga clic en "AGREGAR" o Alt+ Ao Comandos -> "Agregar archivos al archivo"
  • Seleccione RAR o ZIP
  • ir a la pestaña "Archivos"
  • Marque "Poner cada archivo en un archivo separado" en el cuadro Archivos

Cuando haya arreglado cualquier otra configuración que desee, presione OK y auge: múltiples archivos ZIP de múltiples carpetas. Esto funcionó mucho más fácil que la línea de comando 7zip.


Aunque dice "cada archivo", esta casilla también funciona con carpetas.
dhaupin

1
De todas las soluciones propuestas aquí, esta funcionó mejor para mí en 2018. Solo asegúrese de verificar que desea que el archivo se comprima o creará un montón de archivos .rar en su lugar.
Eric Hepperle - CodeSlayer2010

5

Solo una ligera actualización de la respuesta de once81: El siguiente código crea un archivo por lotes en el que se pueden soltar varios elementos.

@echo off
if [%1]==[] goto :eof
:loop
7z a -tzip "%~1.zip" "%~1"
shift
if not [%1]==[] goto loop

Este archivo por lotes se puede agregar al menú contextual a través del registro:

  1. cree una nueva clave en [HKEY_CLASSES_ROOT \ Folder \ shell], llámelo cmd1
  2. Edite el valor de cadena y llámelo 'Batch Zip'
  3. crear otra nueva clave debajo de esta y llamarla comando
  4. Cambie el valor de esto a su ruta, con barras dobles escapadas

Entonces, por ejemplo, mi entrada es "C: \ Users \ Rory \ Dropbox \ _apps \ batch_zip.bat" "% 1"

Una vez que haga esto, tendrá una entrada en su menú contextual para 'Batch Zip' que comprimirá por lotes las carpetas seleccionadas en archivos separados

Sin embargo, si hace esto a través del menú contextual, desafortunadamente ejecutará todas las operaciones simultáneamente, y como cualquiera que haya hecho muchas operaciones de compresión y descompresión lo sabrá, las carpetas de compresión funcionan mucho más rápido una tras otra que todas a la vez.

Si alguien sabe una manera de arreglar esto en el registro, por favor dígaselo.

Arrastrando las carpetas seleccionadas al lote las hará una tras otra.


1
El 7z exe no estaba en mi camino, así que tuve que editar un poco tu script. "C: \ Archivos de programa (x86) \ 7-Zip \ 7z.exe" a -tzip "% ~ 1.zip" "% ~ 1"
Ryan

1
+1 para alentar la pereza con arrastrar y soltar lol. Acabo de publicar una versión modificada @ http://superuser.com/a/1160047/678687
Enteleform

3

Consejo: si sus imágenes son JPG, ya están comprimidas. use 7-Zip en modo 'archivo' sin compresión (nivel de compresión: almacenar) esto acelerará enormemente el proceso.

incluso si usa la compresión Ultra, difícilmente obtendrá un 5%, ciertamente no vale la pena el esfuerzo.

Estaba pensando en términos de prácticamente agregar archivos adjuntos.

No los enviaría como archivo adjunto de correo electrónico. en lugar de subirlo a un servidor llamado alojamiento de un solo clic (por ejemplo, drop.io, rs, mu, ms, etc., las opciones son muchas) y luego enviar el enlace de descarga por correo electrónico a sus amigos y familiares.


2
Sin embargo, serán más fáciles de enviar.
Torre

No creo que haya mucha diferencia en cargar 475 o 500 MB, ciertamente no es suficiente para compensar el tiempo que lleva comprimir un billón de JPG con 'Ultra' :)

Estaba pensando en términos de prácticamente agregar archivos adjuntos. Es más fácil agregar un archivo como archivo adjunto en lugar de 10. (cuando aumenta el número de archivos, esto se vuelve molesto).
Torre

Es por eso que Molly sugirió el modo "archivo"; los mete todo en un archivo, sin perder tiempo tratando de comprimir algo que ya está comprimido ...
Adrien el

Es cierto que me estaba refiriendo a su última oración, pero sin embargo, incluso con una pequeña reducción en el tamaño de los archivos jpeg (y a veces no es tan pequeño, en realidad), todavía vale la pena. El tiempo dedicado a la compresión es mucho menor que el tiempo dedicado a cargarlo, digamos, gmail o algún otro correo (gmail tiene una asignación de tamaño de archivo adjunto relativamente grande).
Torre

2

He encontrado roryok 's respuesta a ser muy útil, le proporcionó una batch scriptpara Windowsque permita a drag-&-droplos archivos de archivado rápido, automatizado.


Para usar este script, simplemente guárdelo con una .batextensión, y luego puede arrastrar y soltar archivos y / o carpetas en el archivo por lotes ( o un acceso directo al archivo por lotes ).

.zipLos archivos se crearán en el mismo directorio que los archivos de origen.
( aunque el destino se puede modificar en el script @archivePath )


Algunas actualizaciones que hice para mejorar la facilidad de personalización y la funcionalidad general:

  • variables nombradas agregadas
  • implementado un forciclo que itera a través de los argumentos dados
    ( junto con delayedexpansionpara permitir variables de tiempo de ejecución )
  • ifcondiciones adicionales para diferenciar filesyfolders
    • esto permite que el contenido de la carpeta se agregue directamente al archivo en lugar de encerrar la carpeta principal dentro del archivo
      ( EG:   \archive.zip\file.txt   VS   \archive.zip\parent_folder\file.txt )
  • agregó un registro de errores para mostrar instancias fallidas o mostrar un mensaje de éxito si no hubo errores

@Echo OFF
SetLocal EnableDelayedExpansion



Rem //  7-Zip Executable Path
Set sevenZip="C:\Program Files\7-Zip\7z.exe"



Rem // START: NewLine Variable Hack
Set newLine=^


Rem // END: NewLine Variable Hack !! DO NOT DELETE 2 EMPTY LINES ABOVE !!



Rem //  Set ErrorLog Variables
Set errorCount=0
Set separator=--------------------------------------------------------
Set errorLog=!newLine!!newLine!!separator!!newLine!!newLine!
Set errorPrefix=ERROR @:
Set successMessage=All Files Were Successfully Archived



Rem //  Loop Through Each Argument
SetLocal DisableDelayedExpansion
for %%x in (%*) do (

    Rem //  Use Current Argument To set File, Folder, & Archive Paths
    SetLocal DisableDelayedExpansion
    Set filePath="%%~x"
    Set directoryFiles="%%~x\*"
    Set archivePath="%%~x.zip"
    SetLocal EnableDelayedExpansion

    Rem //  Source Is A Folder
    if exist !directoryFiles! (
            Set sourcePath=!directoryFiles!
    )

    Rem //  Source Is A File
    if not exist !directoryFiles! (
            Set sourcePath=!filePath!
    )

    Rem //  Print Separator To Divide 7-Zip Output
    echo !newLine!!newLine!!separator!!newLine!!newLine!

    Rem //  Add Files To Zip Archive
    !sevenZip! A -TZIP !archivePath! !sourcePath!

    Rem //  Log Errors
    if ErrorLevel 1 (
        Set /A errorCount=errorCount+1
        Set errorLog=!errorLog!!newLine!!errorPrefix!!sourcePath!
    )
)



Rem //  Print ErrorLog
if !errorCount!==0 (
    Set errorLog=!errorLog!!newLine!!successMessage!
)
Echo !errorLog!!newLine!!newLine!!newLine!



Rem //  Keep Window Open To View ErrorLog
pause

1

7-zip tiene una opción para descomprimir cada archivo en su propia carpeta (* /), pero carece de los comandos de contexto para realizar la acción opuesta que está buscando.

Dicho esto, recuerdo haber hecho esto exactamente usando winrar en el pasado. Hay una opción "archivo único por carpeta" o algo por el estilo.


-1

Obtén picasa y súbela al álbum web de picasa. Entonces todos pueden obtener fácilmente las fotos en línea y verlas. Incluso pueden cargar los originales (para que su familia pueda imprimir las versiones más grandes)


Si usted piensa que la gente va a ser feliz con descargar y extraer archivos zip pienso que usted estará decepcionado por desgracia ... interfaz web es mucho más fácil para todos los involucrados ....
Kurru
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.