web-dev-qa-db-fra.com

Utilisation d'un fichier de commandes pour créer des fichiers Zip sous forme de fichiers Zip individuels

J'essaie donc d'utiliser 7Zip dans un fichier batch pour prendre les fichiers d'un dossier et les compresser sous forme de fichiers individuels. Ainsi, le premier fichier reçoit ses propres archives Zip, et le suivant, etc. J'ai cherché sur Internet et essayé plusieurs codes différents. Jusqu'à présent, je n'ai réussi qu'à les compresser sous forme de fichier Zip unique et de les afficher sur mon bureau.

Malheureusement, j'ai perdu le code qui l'a fait, et maintenant je suis coincé avec ceci qui ne semble rien faire.

@echo on
cd "C:\Users\MVD21\Desktop\test"
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
pause

Je veux que chaque fichier ait sa propre archive Zip et que l'archive Zip partage le nom du fichier, sans l'extension bien sûr.

Toute aide est grandement appréciée.

9
Mike Van Dunk

Je veux que chaque fichier ait sa propre archive Zip et que l'archive Zip partage le nom du fichier, sans l'extension bien sûr.

Script de lot

(Définissez les chemins de dossier explicites complets de la source et de la destination en haut, puis exécutez-les au besoin. La source correspond à l'emplacement où se trouvent les fichiers que vous souhaitez compresser et la destination à laquelle vous souhaitez les compresser. )

@ECHO ON

SET SourceDir=C:\folder\source
SET DestDir=C:\folder\destination

CD /D "C:\Program Files\7-Zip"
FOR /F "TOKENS=*" %%F IN ('DIR /B /A-D "%SourceDir%"') DO (
    7z.exe a "%DestDir%\%%~NF.Zip" "%SourceDir%\%%~NXF"
)
EXIT

Ligne de commande

FOR /F "TOKENS=*" %F IN ('DIR /B /A-D "C:\Folder\Source"') DO 7z.exe a "C:\Folder\Dest\%~NF.Zip" "C:\Folder\Source\%~NXF"

Ressources supplémentaires

3
Pimp Juice IT

Votre script d'origine effectue les opérations suivantes, ligne par ligne:

@echo on

Indique à la commande Invite d'imprimer chaque commande du fichier de commandes avant de les exécuter. C'est juste pour que vous puissiez "voir" ce qu'il fait vraiment avant de le faire.

cd "C:\Users\MVD21\Desktop\test"

C raccroche D irectory dans ce que j'espère être le chemin où vous voulez compresser tous les fichiers.

FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"

Le paramètre pour INest ici (C:\Users\MVD21\Desktop\test). La boucle "body" (l'action derrière le mot clé DOname__) sera exécutée une seule fois , le paramètre %i étant attribué à la valeur C:\Users\MVD21\Desktop\test. Ce n'est pas surprenant que cela ne fasse pas ce que vous voulez! Il semble que cela ferait compresser tout le répertoire dans un seul fichier .7z.

S'il ne fait rien , c'est probablement parce qu'il ne trouve pas le chemin de 7z.exe. Si ce fichier ne se trouve pas dans le répertoire en cours (le répertoire testmentionné ci-dessus), il devra alors figurer sur le PATH(dans la variable d'environnement %PATH%; essayez echo %PATH% dans un shell pour savoir ce qu'il est actuellement). Sinon, vous devez copier 7z.exe dans le répertoire en cours ou spécifier un chemin absolu vers son emplacement (tel que, par exemple, "C:\Program Files\7-Zip\7z.exe" ...).

pausename__

Lorsque le script est terminé, ce mot-clé indique simplement au shell d'attendre que vous appuyiez sur Entrée ou que vous fermiez la commande Invite au lieu de la quitter immédiatement.


Lorsque vous construisez un script batch (ou, en fait, tout ce qui concerne le code), vous devez cesser de traiter le script dans son ensemble comme un copier-coller monolithique que vous ne comprenez pas (au lieu de le comprendre), mais plutôt décomposer votre problème en sous-parties que vous pouvez comprendre individuellement, puis les relier ensemble. Cela vous permettra de résoudre les problèmes de manière indépendante et de créer des solutions au lieu de demander à quelqu'un d'autre de faire tout votre travail à votre place. Je le recommande fortement.

Dans votre cas, vous avez les sous-composants suivants de votre problème:

  1. Parcourez chaque fichier contenu dans un répertoire donné.
  2. Pour chaque fichier donné, placez-le dans un fichier .7z en appelant l'utilitaire 7z.

Les chances que quelqu'un ait déjà une réponse répondant à votre besoin spécifique sont moins grandes que la possibilité de trouver les éléments les plus généraux individuellement.

Cette question, 'Comment faire quelque chose à chaque fichier d'un répertoire dans un script batch' , résout la moitié de votre problème.

La réponse est que vous commencez simplement par cette partie de la réponse StackOverflow:

for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f

et modifiez la partie où fait quelque chose (le echo %%f) pour faire ce que vous voulez . Je sais que vous devez modifier cette partie, car j’ai analysé le texte du script et compris la signification de chaque caractère et paramètre, je peux donc déterminer le lieu où je souhaite insérer mes caractères. propre code.

Voici quelques "code aérien" (non testé!):

for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"

Les instructions @echo on et pauseci-dessus sont une bonne pratique. Vous pouvez donc les laisser. Et vous voudrez probablement conserver cette instruction cdsi vos fichiers se trouvent dans ce chemin.

Alors qu'est-ce que cela nous laisse?

@echo on
cd "C:\Users\MVD21\Desktop\test"
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~nf.7z" "%f"
pause

Si vous répondez avec "ça ne marche pas!", Je ne vous aiderai pas. Si vous essayez ceci et que ça ne marche pas, vous DOIT me dire dans les commentaires les informations suivantes:

  • Quel message d'erreur exact obtenez-vous dans l'invite de commande lorsque vous exécutez ces commandes ou les mettez dans un fichier de commandes et les exécutez? Ne pas abréger; copier et coller le résultat directement (mettez-le http://Pastebin.com s'il s'agit d'un lot).
  • Que pensez-vous du message d'erreur vous indiquant que le problème est?
  • Où se trouve votre installation 7-Zip (le chemin du fichier)?
  • L'emplacement du fichier de votre installation 7-Zip est-il inclus dans le contenu de la variable d'environnement PATHname__? (Cochez cette case, comme mentionné ci-dessus, avec echo %PATH% dans une invite cmdname__.)
3
allquixotic