Come fare 7-zip fare un sacco di cartelle


18

Ho avuto un sacco di foto che ho dovuto ritagliare in 800x600 pixel. È stato fatto facilmente, ma ora devo caricarli in modo che la famiglia possa vederli tutti.

Il fatto è che si tratta di 500 MB nelle immagini. Ho deciso di comprimere semplicemente le cartelle separate, ognuna contenente una quantità quasi uguale di immagini. In questo modo posso caricare un paio ogni giorno. Fare questo manualmente è un lavoro molto lungo e difficile. Mi chiedo se c'è un modo per fare in modo che 7-zip gestisca ciascuna cartella singolarmente?

Penso che avrò bisogno di un file batch per farlo, ma non sono bravo con quello. Ho messo tutto in una cartella. Nelle varie sottocartelle si trovano le immagini. Ciò di cui ho bisogno è che il contenuto di quella cartella sia compresso. Non sono sicuro di poter semplicemente comprimere la cartella insieme ad essa. So che PHP ha un modulo zip, non ci ho mai lavorato, quindi non sono sicuro che sia in grado di gestire il fatto che il contenuto dello zip sia una cartella che contiene gli elementi, anziché solo gli elementi.


1
Di quante cartelle stai parlando? 7? 147? Se non sei bravo con i file batch, ma forse questa è una buona opportunità per affrontare questa sfida. :)
JMD,

105 cartelle totali
KdgDev l'

Risposte:


25

Eseguito da un prompt dei comandi la cui directory di lavoro è la My Picturesdirectory, questo comando creerà un file zip del contenuto di ciascuna sottodirectory, lasciando tutti i file zip nella My Picturesdirectory.

Modifica: ho aggiunto le virgolette necessarie per consentire le directory con spazi nei loro nomi.

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

Inoltre: la versione seguente non inserirà i file in una sottodirectory all'interno del file zip, ma nella sua radice:

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

In Windows 7 e versioni successive

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

o

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

Ho provato ad aggiungere la cartella 7-zip al mio percorso di classe, ma non funzionerà. Se uso l'intera stringa per individuare l'eseguibile anziché solo 7z, funziona. Ho pensato che l'aggiunta di quella stringa al percorso della classe dovrebbe avere lo stesso effetto?
KdgDev,

Qui classpathè dove Java cerca classi e librerie. google.com/search?q=classpath Apparentemente lo hai confuso con il punto in pathcui la shell cerca gli eseguibili.
undici81

Domanda: lo script funziona, ma non quando ci sono spazi nel nome della cartella ...
KdgDev

Grazie per l'aggiornamento. Con il secondo script, vuoi dire che il contenuto della zip sarà "appiattito"?
KdgDev,

6
Questo ha funzionato benissimo per me, anche se ho dovuto passare %%da %dquando la mia casella Win 7 si è lamentata del fatto che il nome var era troppo lungo generando un errore "%% d era inatteso in questo momento".
Benjam,

7

Non sono riuscito a far funzionare la riga di comando, invece ho scaricato WinRAR e mtone aveva ragione: WinRAR ha un'opzione per comprimere più cartelle nei propri file ZIP separati.

Ad esempio C:\Files\Fables 01in C:\Files\Fables 01.zipe C:\Files\Fables 02in C:\Files\Fables 02.zip.

Con WinRAR, apri la cartella che contiene le cartelle che vuoi comprimere, quindi segui questi passaggi:

  • Seleziona tutte le cartelle che vuoi zippare / radere
  • Fai clic su "AGGIUNGI" o Alt+ Ao Comandi -> "Aggiungi file all'archivio"
  • Seleziona RAR o ZIP
  • vai alla scheda "File"
  • Seleziona "Metti ciascun file in un archivio separato" nella casella Archivi

Quando hai altre impostazioni che ti piacciono, premi OK e boom: più file ZIP di più cartelle. Funzionava molto più facilmente della riga di comando 7zip.


Anche se dice "ogni file" questa casella di controllo funziona anche con le cartelle.
Dhaupin,

1
Di tutte le soluzioni proposte qui questa ha funzionato meglio per me nel 2018. Assicurati solo di controllare che desideri che l'archivio sia .zip o creerà invece un mucchio di file .rar.
Eric Hepperle - CodeSlayer2010

5

Solo un leggero aggiornamento della risposta di undici81: il codice seguente crea un file batch su cui è possibile rilasciare più elementi.

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

Questo file batch può quindi essere aggiunto al menu di scelta rapida tramite il registro:

  1. crea una nuova chiave in [HKEY_CLASSES_ROOT \ Folder \ shell], chiamala cmd1
  2. Modifica il valore della stringa e chiamalo "Batch Zip"
  3. crea un'altra nuova chiave sotto questa e chiamala comando
  4. Cambia il valore di questo nel tuo percorso, con doppie barre di escape

Ad esempio, la mia voce è "C: \ Users \ Rory \ Dropbox \ _apps \ batch_zip.bat" "% 1"

Una volta fatto questo avrai una voce nel tuo menu contestuale per "Batch Zip" che comprimerà in batch tutte le cartelle selezionate in archivi separati

Tuttavia, se lo fai tramite il menu di scelta rapida, sfortunatamente eseguirà tutte le operazioni simultaneamente e, come saprà chiunque abbia fatto molto zippare e decomprimere, le cartelle zippate funzionano molto più velocemente una dopo l'altra di tutte in una volta.

Se qualcuno conosce un modo per risolvere questo problema nel registro, informalo.

Trascinando le cartelle selezionate sul batch le farai una dopo l'altra.


1
L'ex 7z non era sulla mia strada e quindi ho dovuto modificare leggermente il tuo script. "C: \ Programmi (x86) \ 7-Zip \ 7z.exe" a -tzip "% ~ 1.zip" "% ~ 1"
Ryan

1
+1 per incoraggiare la pigrizia con drag & drop lol. Ho appena pubblicato una versione modificata @ http://superuser.com/a/1160047/678687
Enteleform

3

Suggerimento: se le immagini sono JPG, sono già compresse. utilizzare 7-Zip in modalità 'archivio' senza compressione (livello di compressione: archivio) per accelerare notevolmente il processo.

anche se usi la compressione Ultra difficilmente guadagnerai il 5%, certamente non vale la pena.

Stavo pensando in termini di aggiungere praticamente degli allegati.

non li invierei come allegato di posta elettronica. piuttosto carica il su un cosiddetto server di hosting con un clic (ad es. drop.io, rs, mu, ms, ecc., le scelte sono molte) e quindi invia il link per il download via e-mail ai tuoi amici e familiari.


2
Saranno più facili da spedire, comunque.
Rook,

non penso che ci sia molta differenza nel caricare 475 o 500 MB, certamente non abbastanza per compensare il tempo necessario per comprimere un gazillion di JPG con 'Ultra' :)

Stavo pensando in termini di aggiungere praticamente degli allegati. È più facile aggiungere un file come allegato anziché 10. (quando aumenta il numero di file, questo diventa fastidioso).
Rook,

Ecco perché Molly ha suggerito la modalità "archivio"; li mette tutti in un unico file, senza perdere tempo a cercare di comprimere qualcosa che è già compresso ...
Adrien,

È vero che mi riferivo alla sua ultima frase, ma tuttavia, anche con una piccola riduzione delle dimensioni dei file jpeg (e talvolta non è così piccola, in realtà), ne vale comunque la pena. Il tempo impiegato per la compressione è molto inferiore al tempo impiegato per caricarlo, per esempio, Gmail o qualche altra posta (Gmail ha una dimensione di allegato relativamente grande).
Rook,

2

Ho trovato molto utile la risposta di roryok , mi ha fornito un batch scriptper Windowsche ti consente di drag-&-droparchiviare file in modo rapido e automatizzato.


Per utilizzare questo script, è sufficiente salvarlo con .batun'estensione, quindi è possibile trascinare e rilasciare i file e / o le cartelle sul file batch ( o un collegamento al file batch ).

.zipi file verranno creati nella stessa directory dei file di origine.
( anche se la destinazione può essere modificata nello script @archivePath )


Alcuni aggiornamenti che ho apportato per migliorare la facilità di personalizzazione e funzionalità generale:

  • aggiunte variabili con nome
  • implementato un forciclo che scorre attraverso gli argomenti forniti
    ( insieme delayedexpansiona consentire le variabili di runtime )
  • aggiunte ifcondizioni per differenziare files&folders
    • ciò consente di aggiungere direttamente all'archivio il contenuto della cartella anziché racchiudere la cartella principale all'interno dell'archivio
      (ad es.   \archive.zip\file.txt   VS   \archive.zip\parent_folder\file.txt )
  • aggiunto un registro degli errori per visualizzare le istanze non riuscite o visualizzare un messaggio di successo se non ci sono errori

@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 ha un'opzione per decomprimere ogni file nella sua cartella (* /), ma manca i comandi di contesto per fare l'azione opposta che stai cercando.

Detto questo, ricordo di aver fatto esattamente questa cosa usando winrar in passato. C'è un'opzione "archivio unico per cartella" o qualcosa in tal senso.


0

Ottieni Picasa e caricalo nell'album web di Picasa. Quindi tutti possono facilmente ottenere le foto online e visualizzarle. Potrebbe anche essere in grado di caricare gli originali (in modo che la tua famiglia possa stampare le versioni più grandi)


Se pensi che le persone saranno felici di scaricare ed estrarre i file zip, penso che rimarrai tristemente deluso ... L'interfaccia Web è molto più facile per tutti i
soggetti
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.