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.
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.
(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
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"
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 IN
est ici (C:\Users\MVD21\Desktop\test)
. La boucle "body" (l'action derrière le mot clé DO
name__) 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 test
mentionné 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" ...
).
pause
name__
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:
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 pause
ci-dessus sont une bonne pratique. Vous pouvez donc les laisser. Et vous voudrez probablement conserver cette instruction cd
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 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:
PATH
name__? (Cochez cette case, comme mentionné ci-dessus, avec echo %PATH%
dans une invite cmd
name__.)