web-dev-qa-db-fra.com

Boucle de ligne de commande pour exécuter la commande sur tous les fichiers d'un répertoire (plus des sous-répertoires, si possible)

Je suppose que c'est assez facile à faire, mais je n'ai aucune expérience des utilitaires de ligne de commande de Windows. En gros, je dois parcourir tous les fichiers d’un répertoire (ce qui est bien s’il peut faire des sous-répertoires, mais je peux l’exécuter sur chacun des 5 répertoires si besoin est), obtenir le nom sous forme de variable et le faire fonctionner.

"C:\Program Files\ImageMagick-6.7.6-Q16\convert.exe" -compress LZW 
   -colorspace Gray -colors 32 file_var file_var

J'ai vu Nommez dynamiquement les fichiers dans une invite de commande pour une boucle . Serais-je capable de l'utiliser (en remplaçant le SET ... avec la commande ci-dessus)? L'espace sur l'ordinateur en question est au-delà limité, je ne peux donc pas effectuer de sauvegarde avant de l'exécuter à ce stade (mauvais, je sais).

13
Robert

Bizarre, il y avait une réponse qui avait la partie récursive.

Eh bien, par Comment faire une boucle dans les fichiers correspondant au caractère générique dans un fichier de traitement par lots , j'ai été capable de réaliser cela. Voici comment cela a été réalisé:

 cd path_to_root
 for /R %%f in (*.tif) do (
 "C:\Program Files\ImageMagick-6.7.6-Q16\convert.exe" -compress LZW 
    -colorspace Gray -colors 32 "%%f" "%%f"
 )
12
Robert

Ouvrez PowerShell

$files = Get-ChildItem -Recurse 
foreach ($file in $files){
    c:\windows\System32\notepad.exe $file.FullName
}

Get-ChildItem récupère une liste de fichiers en tant qu'objets du sous-répertoire actuel. "-recurse" inclura des sous-répertoires. Cela le place dans un tableau $ Files.

La boucle foreach parcourt chaque fichier et appelle le bloc-notes avec l'argument de ligne de commande du chemin d'accès complet à chaque fichier.

ATTENTION: testez le code ci-dessus dans un répertoire contenant quelques petits fichiers texte, car cela ouvrirait une instance de Notepad pour chaque fichier.

Cela devrait vous donner une idée de la façon dont vous allez procéder.

4
Bye