web-dev-qa-db-fra.com

Comment créer des fichiers Zip séparés pour chaque fichier / répertoire sélectionné dans 7zip?

Voici l’emballeur Zip interne de Total Commander:

A picture of the Total Commander Zip packer dialogue box.

Cependant, je souhaite utiliser mon packer 7Zip. Lorsque je sélectionne 5 fichiers, je reçois 5 archives .Zip distinctes pour chaque fichier sélectionné. Comment est-ce que je fais cela dans 7zip?

28
Grumpy ol' Bear

Je ne suis pas sûr que vous puissiez faire ce que vous suggérez en utilisant l'interface utilisateur graphique, mais vous pouvez certainement utiliser la ligne de commande:

FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"

Vous devez d'abord modifier le répertoire (la commande cd) par le répertoire F:\Downloads, ou le répertoire de votre choix pour effectuer la compression en masse. En outre, il est assez facile de remplacer par * .exe ou l’extension que vous souhaitez filtrer pour simplement compresser ces documents.

Et le décodeur secret sonne:

  • %i est une variable qui contient le nom du fichier pour chaque étape de la boucle.
  • (*.*) est le critère de sélection, il pourrait facilement être * .exe ou similaire
  • 7z.exe est la version en ligne de commande de 7-Zip
  • %~ni - ceci étend la variable% i uniquement au nom du fichier - sans extension

Si vous vouliez simplement ajouter les dossiers d'un répertoire donné, la commande est un peu plus complexe, car par défaut, FOR ne fonctionne qu'avec des fichiers. Nous devons lui donner quelques informations supplémentaires:

FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"

Cela fonctionne à cause de quelques morceaux de ce qui semble magique:

  • /F indique à FOR de parcourir la valeur développée entre ()
  • usebackq indique à FOR que je vais passer une commande et utiliser le résultat pour itérer
  • delims=? indique à FOR que je souhaite séparer les jetons du ?, un caractère illégal dans les noms de fichiers et les répertoires. Je veux seulement un jeton.
  • Le /B dans DIR est pour le format nu - juste le nom
  • Le /A:D dans DIR sert à restreindre les résultats par attribut, le D à des répertoires

Si vous souhaitez encapsuler ceci dans un fichier de commandes, la seule modification à apporter consiste à double échapper à la variable% i:

FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"
49
Goyuix

J'aime la réponse de Goyuix. Toutefois, si vous utilisez Windows 7 (ou que Power Shell est installé) et utilisez également la version en ligne de commande de 7-Zip, 7za.exe, vous pouvez exécuter cette commande:

dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

Vous pouvez également remplacer "dir" par "dir * .exe" pour ne sélectionner que les fichiers exécutables.

Une bonne chose à propos de Power Shell est que vous travaillez avec des objets plutôt que des chaînes. Vous pourriez donc être très spécifique si vous le souhaitiez. Par exemple:

dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }

Cela n'inclura que les fichiers qui:

  1. avoir une extension csv
  2. taille inférieure à 18 900 octets
  3. dernière modification le 7/1/2011

EDIT Si vous voulez des fichiers Zip au lieu de 7 Zip, utilisez le fichier Zip.exe d'InfoZip . au lieu.

12
jftuga

Vous pouvez télécharger et installer le plug-in 7Zip pour Total Commander à partir de http://www.ghisler.com/plugins.htm Une fois que vous le faites à droite il y aura une autre sélection pour la compression 7Zip de la fenêtre de votre capture d'écran. Avec cette option, vous pouvez accomplir exactement ce que vous demandez.

0
Mxx