Voici le pack zip interne de Total Commander:
Cependant, je veux utiliser mon packer 7zip. Lorsque je sélectionne 5 fichiers, j'obtiens 5 archives .zip distinctes pour chaque fichier sélectionné. Comment faire ça dans 7zip?
Voici le pack zip interne de Total Commander:
Cependant, je veux utiliser mon packer 7zip. Lorsque je sélectionne 5 fichiers, j'obtiens 5 archives .zip distinctes pour chaque fichier sélectionné. Comment faire ça dans 7zip?
Réponses:
Je ne suis pas sûr que vous puissiez faire ce que vous proposez en utilisant l'interface utilisateur graphique, mais vous pouvez certainement le faire à partir de la ligne de commande:
FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"
Vous devez d'abord changer le répertoire (la cd
commande) en F:\Downloads
répertoire, ou tout répertoire dans lequel vous souhaitez effectuer la compression de masse. En outre, il est assez facile de remplacer le fichier * .exe ou l'extension que vous souhaitez filtrer pour compresser ces documents.
Et l'anneau de dé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, il pourrait facilement être * .exe ou similaire7z.exe
est la version en ligne de commande de 7-Zip%~ni
- cela étend la variable% i au seul nom de fichier - pas d'extensionSi vous vouliez simplement ajouter les dossiers pour un répertoire donné, la commande est un peu plus complexe car par défaut, FOR fonctionne uniquement avec les fichiers. Nous devons lui fournir 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 d'itérer sur la valeur développée dans ()usebackq
dit à FOR que je vais passer une commande et utiliser la sortie pour itérerdelims=?
dit à FOR que je veux séparer les jetons sur le ?
- un caractère illégal dans les noms de fichiers et les répertoires. Je veux seulement un jeton./B
entrée DIR
est pour le format nu - juste le nom/A:D
in DIR
est pour restreindre les résultats par attribut, le D est pour les répertoiresSi vous souhaitez encapsuler cela à l'intérieur d'un fichier de commandes, la seule modification que vous devrez faire est de doubler la variable% i:
FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"
J'aime la réponse de Goyuix. Cependant, si vous utilisez Windows 7 (ou si 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 changer "dir" en "dir * .exe" pour sélectionner uniquement les fichiers exécutables.
Une bonne chose à propos de Power Shell est que vous travaillez avec des objets au lieu de chaînes. Vous pouvez donc être vraiment précis 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:
MODIFIER Si vous voulez des fichiers zip au lieu de fichiers 7-zip, utilisez plutôt zip.exe d'InfoZip .
7z a -tzip archive.zip *.exe
Vous pouvez télécharger et installer le plugin 7zip pour Total Commander sur http://www.ghisler.com/plugins.htm Une fois que vous avez fait cela sur le côté droit 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 accomplir exactement ce que vous demandez.
Je viens de travailler exactement sur ce problème et l'un des problèmes que j'ai trouvés était la duplication du nom de dossier dans l'archive, c'est-à-dire lors de la compression d'un dossier appelé "foo", une archive contenant .\foo\fighters.txt
est produite au lieu d'une seule contenant fighters.txt
.
La réponse est donc d'aller 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 dans ce répertoire afin de traiter le dossier suivant.
Il est également important que 7ZIP ignore 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 -x!*.zip
et -x!*.cmd
exclusion.
Ce script conservera également des structures de dossiers récursives.
@echo off
REM Ensures variables set within the batch file are local to
REM this script only and will be removed when finished.
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 Note: for this script to work, compression of
Echo pre-existing zip files is not possible.
:end
pause
Le code ci-dessus doit être copié dans un fichier de commandes 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 t'aides.
Si vous devez conserver la structure des dossiers et enregistrer chaque fichier dans sa propre structure, essayez ceci:
Enregistrez cette commande dans un fichier avec l'extension .bat et placez-la dans le dossier que vous devez compresser:
FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel
Remarque:
-sdel: supprime le fichier d'origine (facultatif, si vous souhaitez uniquement conserver le fichier compressé)