Votre script d'origine effectue les opérations suivantes, ligne par ligne:
@echo on
Indique à l'invite de commandes d'imprimer chaque commande dans le 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 hangements D irectory dans ce que je souhaite est le chemin où vous voulez zip tous les fichiers.
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
Le paramètre IN
ici est (C:\Users\MVD21\Desktop\test)
. Cela provoquera l' DO
exécution de la boucle "body" (l'action derrière le mot-clé ) exactement une fois , avec le %i
paramètre affecté à la valeur C:\Users\MVD21\Desktop\test
. Il n'est pas surprenant que cela ne fasse pas ce que vous voulez! Il semble que cela compresserait le répertoire entier 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 n'est pas dans le répertoire courant (ce test
répertoire mentionné ci-dessus), alors il devra être sur le PATH
(dans la %PATH%
variable d'environnement; essayez echo %PATH%
dans un shell pour voir ce qu'il est actuellement défini). Sinon, vous devez copier 7z.exe
dans le répertoire actuel ou spécifier un chemin absolu vers son emplacement (comme, par exemple, "C:\Program Files\7-zip\7z.exe" ...
).
pause
Lorsque le script est terminé, ce mot clé indique simplement au shell d'attendre que vous appuyiez sur Entrée ou fermiez l'invite de commande au lieu de le quitter immédiatement.
Lorsque vous créez un script par lots (ou, en fait, tout autre élément traitant du code), vous devez cesser de traiter l'intégralité du script comme un copier-coller monolithique que vous ne (tentez) pas de comprendre, et décomposez plutôt votre problème en sous-parties que vous pouvez comprendre individuellement, puis raccordez-les ensemble. Cela vous permettra de résoudre les problèmes indépendamment et de créer des solutions au lieu de demander à quelqu'un d'autre de faire tout votre travail pour vous. Je le recommande fortement.
Dans votre cas, vous avez les sous-composants suivants de votre problème:
- Parcourez (bouclez) chaque fichier contenu dans un répertoire donné.
- Pour chaque fichier donné, placez-le dans un fichier .7z en appelant l'
7z
utilitaire.
Les chances que quelqu'un ait déjà une réponse qui résout votre besoin spécifique sont inférieures à celles de pouvoir trouver les pièces les plus générales individuellement.
Cette question, «Comment faire quelque chose pour chaque fichier d'un répertoire dans un script batch» résout la moitié de votre problème.
L'idée maîtresse de la réponse est que vous venez de commencer avec cette partie de cette réponse StackOverflow:
for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f
et changez la partie où il fait quelque chose (le echo %%f
) pour faire ce que vous voulez faire . Je sais que vous devez changer cette partie, car j'ai analysé le texte du script et compris ce que signifie chaque caractère et paramètre, donc je peux raisonner sur l'endroit où je veux insérer mon propre code.
Voici un "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 pause
ci-dessus sont une bonne pratique, vous pouvez donc les laisser. Et vous voudrez probablement conserver cette cd
instruction également, si 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 par "Ça ne marche pas!", JE NE VOUS AIDERAI PAS. Si vous essayez ceci et que cela ne fonctionne pas, vous DEVEZ me dire dans les commentaires les informations suivantes:
- Quel message d'erreur exact obtenez-vous dans l'invite de commandes lorsque vous exécutez ces commandes ou les placez dans un fichier de commandes et les exécutez? Ne pas abréger; copiez et collez la sortie directement (mettez-la sur http://pastebin.com si c'est beaucoup).
- Que pensez- vous que le message d'erreur vous indique 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
PATH
variable d'environnement? (vérifiez cela, comme mentionné ci-dessus, avec echo %PATH%
une cmd
invite.)