J'essaie donc d'utiliser 7zip dans un fichier de commandes pour prendre les fichiers dans un dossier et les compresser en tant que fichiers individuels. Ainsi, le premier fichier obtient sa propre archive zip, et le suivant et ainsi de suite. J'ai regardé sur Internet et essayé un tas de codes différents. Jusqu'à présent, je n'ai réussi à les compresser qu'en un seul fichier zip et à les exporter sur mon bureau.
Malheureusement, j'ai perdu le code qui a fait ça, et maintenant je suis coincé avec ce 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, moins l'extension bien sûr.
Toute aide est grandement appréciée.
Réponses:
Script de lot
(Définissez les chemins de dossier explicites complets de la source et de la destination, puis exécutez-les selon vos besoins. La source est l'endroit où les fichiers existent que vous souhaitez compresser et la destination est l'endroit où vous souhaitez les compresser.)
Ligne de commande
Autres ressources
la source
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 valeurC:\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 (cetest
répertoire mentionné ci-dessus), alors il devra être sur lePATH
(dans la%PATH%
variable d'environnement; essayezecho %PATH%
dans un shell pour voir ce qu'il est actuellement défini). Sinon, vous devez copier7z.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:
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
etpause
ci-dessus sont une bonne pratique, vous pouvez donc les laisser. Et vous voudrez probablement conserver cettecd
instruction également, si vos fichiers se trouvent dans ce chemin.Alors qu'est-ce que cela nous laisse?
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:
PATH
variable d'environnement? (vérifiez cela, comme mentionné ci-dessus, avececho %PATH%
unecmd
invite.)la source