Ceci est le packer zip interne de Total Commander:
Cependant, je veux utiliser mon packer 7zip. Lorsque je sélectionne 5 fichiers, j'obtiens 5 archives .zip séparées pour chaque fichier sélectionné. Comment puis-je faire cela dans 7zip?
Ceci est le packer zip interne de Total Commander:
Cependant, je veux utiliser mon packer 7zip. Lorsque je sélectionne 5 fichiers, j'obtiens 5 archives .zip séparées pour chaque fichier sélectionné. Comment puis-je faire cela dans 7zip?
Je ne suis pas sûr que vous puissiez faire ce que vous suggérez en utilisant l'interface graphique, mais vous pouvez certainement le faire à partir de la ligne de commande :
POUR %i DANS (*.*) FAIRE 7z.exe a "%~ni.7z" "%i"
Vous devriez changer de répertoire (avec la commande cd
) vers le répertoire F:\Téléchargements
en premier lieu, ou vers n'importe quel répertoire dans lequel vous souhaitez effectuer la compression en masse. De plus, il est assez facile de remplacer *.exe ou n'importe quelle extension par laquelle vous désirez filtrer pour compresser juste ces documents.
Et maintenant, le codeur secret :
%i
est une variable qui contient le nom du fichier pour chaque étape de la boucle(*.*)
est le critère de sélection, cela pourrait facilement être *.exe ou similaire7z.exe
est la version en ligne de commande de 7-Zip%~ni
- ceci étend la variable %i au nom du fichier uniquement - sans extensionSi vous voulez juste ajouter les dossiers pour un répertoire donné, la commande est un peu plus complexe car par défaut, FOR ne fonctionne qu'avec les fichiers. Nous devons lui fournir des informations supplémentaires :
POUR /F "usebackq delims=?" %i DANS (`DIR /B /A:D`) FAIRE 7z.exe a "%i.7z" "%i"
Cela fonctionne à cause de quelques éléments qui semblent être de la magie :
/F
indique à FOR d'itérer sur la valeur développée en ()usebackq
indique à FOR que je vais passer une commande et utiliser la sortie pour itérerdelims=?
indique à FOR que je veux séparer les jetons sur le ?
- un caractère illégal dans les noms de fichiers et de répertoires. Je veux seulement un jeton./B
dans DIR
est pour le format brut - juste le nom/A:D
dans DIR
est pour restreindre les résultats par attribut, le D est pour les répertoiresSi vous voulez encapsuler ceci dans un fichier batch, la seule modification que vous aurez besoin de faire est de doubler l'échappement de la variable %i :
POUR %%i DANS (*.*) FAIRE 7z.exe a "%%~ni.7z" "%%i"
J'aime la réponse de Goyuix. Cependant, si vous utilisez Windows 7 (ou avez Power Shell installé) et que vous utilisez également la version en ligne de commande de 7-zip, 7za.exe, alors vous pouvez exécuter cette commande:
dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Vous pouvez également changer "dir" en "dir *.exe" pour ne sélectionner que les fichiers exécutables.
Un avantage de Power Shell est que vous travaillez avec des objets au lieu de chaînes de caractères. Ainsi, vous pouvez être très spécifique si vous le souhaitez. Par exemple:
dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Cela inclura uniquement les fichiers qui:
ÉDITER Si vous voulez des fichiers zip plutôt que des fichiers 7-zip, utilisez zip.exe d'InfoZip à la place.
Vous pouvez télécharger et installer le plugin 7zip pour Total Commander depuis http://www.ghisler.com/plugins.htm Une fois que vous avez fait cela, à droite de la fenêtre de votre capture d'écran, il y aura une autre sélection pour la compression 7zip. Avec cette option, vous pouvez obtenir exactement ce que vous demandez.
J'ai juste travaillé sur exactement ce problème et l'un des problèmes que j'ai trouvé était la duplication du nom du dossier dans l'archive, c'est-à-dire que lors de la compression d'un dossier appelé "foo" une archive contenant .\foo\fighters.txt
est produite au lieu de simplement contenir fighters.txt
.
La réponse, par conséquent, est d'entrer dans le répertoire en cours de traitement et de faire apparaître l'archive dans le répertoire précédent (racine), puis de revenir à ce répertoire pour traiter le dossier suivant.
Il est également important d'avoir 7ZIP ignorer les fichiers ZIP et CMD existants dans le répertoire racine pour éviter qu'ils ne se retrouvent dans l'archive, d'où les arguments d'exclusion -x!*.zip
et -x!*.cmd
.
Ce script va également maintenir les structures de dossier récursives.
@echo off
REM Assure que les variables définies dans le fichier batch sont locales à
REM ce script uniquement et seront supprimées une fois terminées.
setlocal
if exist *.zip goto zip_exist
for /d %%X in (*) do (
cls
cd /D %%X
"e:\Program Files\7-Zip\7z.exe" a -r -x!*.zip -x!*.cmd "..\%%X.zip" "*.*"
cd ..
)
goto end
:zip_exist
Echo.
Echo Remarque : pour que ce script fonctionne, la compression de
Echo fichiers zip préexistants n'est pas possible.
:end
pause
Le code ci-dessus devrait être copié dans un fichier batch tel que "compress_dirs.cmd" et exécuté en tant qu'administrateur à partir du répertoire contenant les dossiers que vous souhaitez compresser.
J'espère que cela vous aidera.
Si vous avez besoin de conserver la structure des dossiers et de sauvegarder chaque fichier dans sa propre structure, essayez ceci :
Enregistrez cette commande dans un fichier avec l'extension .bat et placez-le dans le dossier que vous souhaitez zipper :
FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel
Remarque :
-sdel : Supprime le fichier original (facultatif, si vous voulez seulement conserver le fichier compressé)
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.