web-dev-qa-db-fra.com

Comment faire une boucle for en ligne de commande Windows?

Je me demandais si c'était possible? Je ne suis pas familier avec l'utilisation de la ligne de commande Windows, mais je dois l'utiliser pour un projet sur lequel je travaille. J'ai un certain nombre de fichiers, pour lesquels je dois effectuer une fonction pour chacun. J'ai l'habitude de travailler avec python, mais évidemment c'est un peu différent, donc j'espérais de l'aide.

Fondamentalement, j'ai besoin de la boucle for pour parcourir 17 fichiers dans un dossier, exécuter une fonction sur chacun (qui utilise le logiciel spécifique que j'ai ici pour le projet), puis cela produira un fichier avec un nom unique (la fonction me nécessite normalement pour énoncer le nom du fichier de sortie) je le sucerais et le ferais juste à la main pour chacun des 17, mais fondamentalement, il crée une base de données d'un fichier, puis le compare à chacun des 17. Il doit être itéré par plusieurs centaines de fois cependant. L'utilisation d'une boucle for pourrait me faire gagner des jours de travail.

Suggestions?

30
TheFoxx

L'interpréteur de ligne de commande possède en effet une construction FOR que vous pouvez utiliser à partir de l'invite de commande ou à partir d'un fichier de commandes.

Pour votre objectif, vous voulez probablement quelque chose comme:

FOR %i IN (*.ext) DO my-function %i

Ce qui se traduira par le nom de chaque fichier avec l'extension * .ext dans le répertoire actuel transmis à ma fonction (qui pourrait, par exemple, être un autre fichier .bat).

Le (*.ext) partie est le "filespec", et est assez flexible avec la façon dont vous spécifiez des ensembles de fichiers. Par exemple, vous pourriez faire:

FOR %i IN (C:\Some\Other\Dir\*.ext) DO my-function %i

Pour effectuer une opération dans un répertoire différent.

Il existe de nombreuses options pour la spécification de fichier et FOR en général. Voir

HELP FOR

à partir de l'invite de commandes pour plus d'informations.

41
Myk Willis

Cela peut vous aider à trouver ce que vous cherchez ... Boucle de script par lots

Ma réponse est la suivante:

@echo off
:start
set /a var+=1
if %var% EQU 100 goto end
:: Code you want to run goes here
goto start

:end
echo var has reached %var%.
pause
exit

Le premier ensemble de commandes sous l'étiquette de démarrage boucle jusqu'à ce qu'une variable,% var% atteigne 100. Une fois que cela se produit, il vous avertit et vous permet de quitter. Ce code peut être adapté à vos besoins en changeant le 100 en 17 et en mettant votre code ou en utilisant une commande d'appel suivie du chemin du fichier batch (Maj + clic droit sur le fichier et sélectionnez "Copier comme chemin") où le commentaire est placé.

5
Josh Girouard

Pour faire des boucles indépendamment des fichiers ou répertoires, voir e. g. Boucle de script par lots ,. Btw. L'aide de la SEP devrait aussi aider (mais qui y creuse)

1
Christian Gosch

Vous pouvez également envisager d'ajouter ".

Par exemple, for %i in (*.wav) do opusenc "%~ni.wav" "%~ni.opus" est une très bonne idée.

0
Alice Vixie