web-dev-qa-db-fra.com

Comment faire 7-zip faire un tas de dossiers entiers

J'ai eu un tas d'images que je devais récolter dans 800x600 pixels. Cela a été facilement fait, mais je dois maintenant les télécharger afin que la famille puisse les voir tous.

Chose est, c'est 500 Mo en images. J'ai décidé de simplement zip 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 dur. Je me demande s'il y a un moyen de faire de la poignée 7-zip chaque dossier individuellement?

Je pense que j'aurai besoin d'un fichier de lot pour le faire, mais je ne suis pas bon avec ça. J'ai tout mis sous un dossier. Dans les différents sous-dossiers, c'est où se trouvent les images. Ce dont j'ai besoin, c'est que le contenu de ce dossier soit zippé. Je ne sais pas si je peux simplement convertir le dossier avec elle. Je sais PHP a un module ZIP, je n'ai jamais travaillé avec elle, alors je ne sais pas si cela peut supporter le fait que le contenu du zip est un dossier contenant le articles, au lieu de juste les articles.

18
KdgDev

Exécuter à partir d'une invite de commande dont votre répertoire de travail est votre My Pictures Répertoire, cette commande créera un fichier zip du contenu de chaque sous-répertoire, laissant tous les fichiers zip de votre My Pictures répertoire.

Edit : J'ai ajouté les guillemets nécessaires pour permettre aux annuaires avec des espaces dans leurs noms.

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

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

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

sous Windows 7 et plus

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

ou alors

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

Je n'ai pas pu obtenir la ligne de commande à travailler, mais j'ai téléchargé WinRar et MTONE a eu raison - WinRar a une option pour connecter plusieurs dossiers dans leurs propres fichiers zip distincts.

Par exemple. C:\Files\Fables 01 dans C:\Files\Fables 01.Zip, et C:\Files\Fables 02 dans C:\Files\Fables 02.Zip.

Avec WinRar, ouvrez le dossier contenant les dossiers que vous souhaitez sélectionner, puis procédez comme suit:

  • Sélectionnez tous les dossiers que vous voulez zipper/rared
  • Cliquez sur "Ajouter" ou Alt+A ou commandes -> "Ajouter des fichiers à archiver"
  • Sélectionnez RAR ou ZIP
  • aller à l'onglet "Fichiers"
  • Vérifiez "Mettez chaque fichier pour séparer les archives" dans la zone Archives

Lorsque vous avez d'autres paramètres que vous avez comme corrigé, cliquez sur OK et Boom: plusieurs fichiers zip de plusieurs dossiers. Cela a tellement fonctionné plus facile que la ligne de commande 7zip.

7
user134042

Juste une légère mise à jour de la réponse de once81: le code ci-dessous crée un fichier de commandes que plusieurs éléments peuvent être supprimés.

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

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

  1. créez une nouvelle clé sous [HKEY_CLASSES_ROOT\Dossier\Shell], appelez-le cmd1
  2. Modifiez la valeur de la chaîne et appelez-le 'lot zip'
  3. créez une autre nouvelle clé sous celle-ci et appelez la commande informatique
  4. Changez la valeur de ceci sur votre chemin, avec des barres obliques à double échappement

Donc, par exemple, mon entrée est "c:\users\rory\dropbox\_apps\batch_zip.bat" "% 1" "

Une fois que vous ferez cela, vous aurez une entrée dans votre menu contextuel pour 'Zip Batch' qui lottera zip tous les dossiers sélectionnés dans des archives distinctes

Toutefois, si vous faites cela via le menu contextuel, cela dirigera malheureusement toutes les opérations simultanément et que quiconque a fait beaucoup de zipping et de décompression saura savoir, les dossiers de zipping fonctionnent beaucoup plus rapidement après l'autre que tout à la fois.

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

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

5
roryok

Conseil: Si vous êtes des images, des JPGS, ils sont déjà compressés. Utilisez le mode 'Archive' en mode 'Archives' sans compression (Niveau de compression: Stocker) Cela accélérera le processus énormément.

même si vous utilisez Ultra Compression, vous gagnerez à peine 5%, ne valez certainement pas l'effort.

Je pensais en termes d'adéquation pratiquement des pièces jointes.

je ne leur enverrais pas comme pièce jointe. Plutôt téléchargez-le sur un serveur d'hébergement à un clic (E.G. Drop.io, RS, MU, MS, etc., les choix sont nombreux), puis envoyez le lien de téléchargement par courrier électronique à vos amis et à votre famille.

3
Molly7244

J'ai trouvé Roryok La réponse est très utile, il a fourni un batch script pour Windows qui vous permet de drag-&-drop Fichiers pour archivage rapide et automatisé.


Pour utiliser ce script, il suffit de l'enregistrer avec un .bat Extension, puis vous pouvez faire glisser-déposer des fichiers et/ou des dossiers sur le fichier de commandes ( ou un raccourci vers le fichier de lot ).

.Zip Les 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 faites pour améliorer la facilité de personnalisation et fonctionnalité globale:

  • ajout de variables nommées
  • mis en œuvre une boucle for qui itère à travers les arguments donnés
    ( avec delayedexpansion pour permettre des variables d'exécution )
  • ajouté if conditions de différenciation files & folders [.____]
    • cela permet d'ajouter des contenus dossiers à l'archive directement plutôt que de joindre le dossier parent dans l'archive.
      [.____] ( par exemple: \archive.Zip\file.txt[~ # ~] vs [~ # ~ ~]\archive.Zip\parent_folder\file.txt)
  • a ajouté un journal d'erreur pour afficher les instances échouées ou afficher un message de réussite s'il n'y avait pas 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
2
Enteleform

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

Cela dit, je me souviens de faire cette chose exacte en utilisant WinRar dans le passé. Il y a une option "archive unique par dossier" ou quelque chose à cet effet.

1
mtone