Comment faire 7-zip faire tout un tas de dossiers

18

J'ai obtenu un tas de photos que j'ai dû recadrer en 800x600 pixels. Cela a été facile à faire, mais maintenant je dois les télécharger pour que la famille puisse les voir tous.

La chose est, c'est 500 Mo en images. J'ai décidé de simplement compresser les dossiers séparés, qui contiennent chacun une quantité presque égale d'images. De cette façon, je peux télécharger un couple chaque jour. Faire cela manuellement est un travail très long et difficile. Je me demande s'il existe un moyen de faire gérer 7-zip chaque dossier individuellement?

Je pense que j'aurai besoin d'un fichier batch pour le faire, mais je ne suis pas bon avec ça. J'ai tout mis dans un dossier. Dans les différents sous-dossiers se trouve l'emplacement des images. Ce dont j'ai besoin, c'est que le contenu de ce dossier soit compressé. Je ne sais pas si je peux simplement compresser le dossier avec lui. Je sais que PHP a un module zip, je ne l'ai jamais travaillé, donc je ne sais pas s'il peut gérer le fait que le contenu du zip est un dossier qui contient les éléments, au lieu de simplement les éléments.

KdgDev
la source
1
De combien de dossiers parlez-vous? sept? 147? Si vous n'êtes pas bon avec les fichiers batch, mais c'est peut-être une bonne occasion de relever ce défi. :)
JMD
105 dossiers au total
KdgDev

Réponses:

25

Exécutée à partir d'une invite de commandes dont le répertoire de travail est votre My Picturesrépertoire, cette commande créera un fichier zip du contenu de chaque sous-répertoire, en laissant tous les fichiers zip dans votre My Picturesrépertoire.

Edit: J'ai ajouté les guillemets nécessaires pour autoriser les répertoires avec des espaces dans leurs noms.

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

Aussi: La version suivante ne placera pas les fichiers dans un sous-répertoire à l'intérieur du fichier zip, mais à la place dans sa racine:

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

Sous Windows 7 et supérieur

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

ou

for /D %d in (*.*) do 7z a -tzip "%d.zip" ".\%d\*"
onze81
la source
J'ai essayé d'ajouter le dossier 7-zip à mon chemin de classe, mais cela ne fonctionnera pas. Si j'utilise la chaîne entière pour localiser l'exécutable au lieu de seulement 7z, cela fonctionne. Je pensais que l'ajout de cette chaîne au chemin de classe devrait avoir le même effet?
KdgDev
C'est classpathlà que Java recherche les classes et les bibliothèques. google.com/search?q=classpath Vous avez apparemment confondu cela avec celui pathoù le shell recherche les exécutables.
eleven81
Question: le script fonctionne, mais pas quand il y a des espaces dans le nom du dossier ...
KdgDev
Merci pour la mise à jour. Avec le deuxième script, voulez-vous dire que le contenu du zip sera "aplati"?
KdgDev
6
Cela a très bien fonctionné pour moi, même si je devais changer %%dpour %dque ma boîte Windows 7 se plaint le nom var étant de jeter une trop longue erreur « %% d était inattendue à ce temps ».
Benjam
7

Je n'ai pas pu faire fonctionner la ligne de commande, mais j'ai téléchargé WinRAR et mtone avait raison - WinRAR a une option pour compresser plusieurs dossiers dans leurs propres fichiers ZIP séparés.

Par exemple, C:\Files\Fables 01dans C:\Files\Fables 01.zipet C:\Files\Fables 02dans C:\Files\Fables 02.zip.

Avec WinRAR, ouvrez le dossier qui contient les dossiers que vous souhaitez compresser, puis procédez comme suit:

  • Sélectionnez tous les dossiers que vous souhaitez compresser / rarer
  • Cliquez sur "AJOUTER" ou Alt+ Aou Commandes -> "Ajouter des fichiers à l'archive"
  • Sélectionnez RAR ou ZIP
  • allez dans l'onglet "Fichiers"
  • Cochez «Mettre chaque fichier dans des archives distinctes» sous la zone Archives

Lorsque vous avez réglé d'autres paramètres que vous aimez, appuyez sur OK et boom: plusieurs fichiers ZIP de plusieurs dossiers. Cela a fonctionné tellement plus facilement que la ligne de commande 7zip.

user134042
la source
Même si elle indique «chaque fichier», cette case à cocher fonctionne également avec les dossiers.
dhaupin
1
De toutes les solutions proposées ici, celle-ci a fonctionné le mieux pour moi en 2018. Assurez-vous simplement que vous voulez que l'archive soit .zip ou cela fera un tas de fichiers .rar à la place.
Eric Hepperle - CodeSlayer2010
5

Juste une légère mise à jour de la réponse de eleven81: Le code ci-dessous crée un fichier batch sur lequel plusieurs éléments peuvent être déposés.

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

Ce fichier batch peut ensuite être ajouté au menu contextuel via le registre:

  1. créez une nouvelle clé sous [HKEY_CLASSES_ROOT \ Folder \ shell], appelez-la cmd1
  2. Modifiez la valeur de la chaîne et appelez-la `` Batch Zip ''
  3. créer une autre nouvelle clé sous celle-ci et l'appeler la commande
  4. Changez la valeur de ceci en votre chemin, avec des barres obliques doubles

Ainsi, par exemple, mon entrée est "C: \ Users \ Rory \ Dropbox \ _apps \ batch_zip.bat" "% 1"

Une fois que vous faites cela, vous aurez une entrée dans votre menu contextuel pour «Batch Zip» qui compressera par lots tous les dossiers sélectionnés dans des archives distinctes

Cependant, si vous le faites via le menu contextuel, il exécutera malheureusement toutes les opérations simultanément, et comme le savent tous ceux qui ont fait beaucoup de zips et de décompressages, le zippage des dossiers fonctionne beaucoup plus rapidement les uns après les autres que tous en même temps.

Si quelqu'un connaît un moyen de résoudre ce problème dans le registre, veuillez le dire.

Faire glisser les dossiers sélectionnés sur le lot les fera l'un après l'autre.

roryok
la source
1
L'exe 7z n'était pas sur mon chemin et j'ai donc dû modifier légèrement votre script. "C: \ Program Files (x86) \ 7-Zip \ 7z.exe" a -tzip "% ~ 1.zip" "% ~ 1"
Ryan
1
+1 pour encourager la paresse avec drag & drop lol. Je viens de
publier
3

Astuce: si vos images sont des JPG, elles sont déjà compressées. utiliser 7-Zip en mode «archive» sans compression (niveau de compression: stocker), cela accélérera considérablement le processus.

même si vous utilisez la compression Ultra, vous gagnerez à peine 5%, cela ne vaut certainement pas la peine.

Je pensais en termes d'ajout de pièces jointes.

je ne les enverrais pas en pièce jointe. téléchargez plutôt le sur un soi-disant serveur d'hébergement en un clic (par exemple drop.io, rs, mu, ms, etc., les choix sont nombreux), puis envoyez le lien de téléchargement par e-mail à vos amis et votre famille.


la source
2
Ils seront cependant plus faciles à envoyer.
Tour
je ne pense pas qu'il y ait beaucoup de différence dans le téléchargement de 475 ou 500 Mo, certainement pas assez pour compenser le temps nécessaire pour compresser un gazillion de JPG avec 'Ultra' :)
Je pensais en termes d'ajout de pièces jointes. Il est plus facile d'ajouter un fichier en pièce jointe au lieu de 10. (lorsque le nombre de fichiers augmente, cela devient ennuyeux).
Tour
C'est pourquoi Molly a suggéré le mode "archive"; il les rassemble tous dans un seul fichier, sans perdre de temps à essayer de compresser quelque chose qui est déjà compressé ...
Adrien
C'est vrai que je me référais à sa dernière phrase, mais néanmoins, même avec une petite réduction de la taille des fichiers jpeg (et parfois ce n'est pas si petit, en fait), cela en vaut toujours la peine. Le temps consacré à la compression est bien inférieur au temps passé à le télécharger sur, disons, Gmail ou un autre courrier (Gmail ayant une allocation de taille de pièce jointe relativement importante).
Tour
2

J'ai trouvé la réponse de roryok très utile, il a fourni un batch scriptpour Windowsqui vous permet de classer les drag-&-dropfichiers pour un archivage rapide et automatisé.


Pour utiliser ce script, enregistrez-le simplement avec une .batextension, puis vous pouvez faire glisser et déposer des fichiers et / ou des dossiers sur le fichier de commandes ( ou un raccourci vers le fichier de commandes ).

.ziples fichiers seront créés dans le même répertoire que les fichiers source.
( bien que la destination puisse être modifiée dans le script @archivePath )


Quelques mises à jour que j'ai apportées pour améliorer la facilité de personnalisation et la fonctionnalité globale:

  • ajout de variables nommées
  • implémenté une forboucle qui parcourt les arguments donnés
    ( ainsi que delayedexpansionpour autoriser les variables d'exécution )
  • ifconditions supplémentaires pour différencier filesetfolders
    • cela permet au contenu du dossier d'être ajouté directement à l'archive plutôt que d'enfermer le dossier parent dans l'archive
      ( EG:   \archive.zip\file.txt   VS   \archive.zip\parent_folder\file.txt )
  • ajouté un journal des erreurs pour afficher les instances ayant échoué ou afficher un message de réussite s'il n'y a pas eu d'erreurs

@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
Enteleform
la source
1

7-zip a une option pour décompresser chaque fichier dans son propre dossier (* /), mais il manque les commandes de contexte pour effectuer l'action inverse que vous recherchez.

Cela dit, je me souviens d'avoir fait cette chose exacte en utilisant winrar dans le passé. Il y a une option "archive unique par dossier" ou quelque chose à cet effet.

mtone
la source
-1

Obtenez picasa et téléchargez-le dans l'album Web de picasa. Ensuite, tout le monde peut facilement mettre les photos en ligne et les visualiser, et peut même télécharger les originaux (pour que votre famille puisse imprimer les versions plus grandes)

Kurru
la source
Si vous pensez que les gens seront heureux de télécharger et d'extraire des fichiers zip, je pense que vous serez tristement déçu ... L'interface Web est beaucoup plus facile pour toutes les personnes impliquées ....
Kurru