10 votes

Traitement par lots de tous les fichiers du répertoire

Pour l'instant, j'ai écrit un travail par lots qui appelle un autre fichier et transmet les variables dont l'exécutable a besoin pour s'exécuter (mot de passe et nom de fichier).

Ex :

> cd f:\test\utils 
> admin import-xml -Dimport.file=f:\DB\file1.xml  -Dadmin.db.password=test123

J'ai écrit un travail qui fait cela, mais j'ai découvert qu'il y aurait plusieurs fichiers.

Le nom d'utilisateur et le mot de passe ne changent jamais mais le nom de fichier diffère pour environ 15 fichiers xml différents - et peut-être d'autres à venir.

Les fichiers seront toujours situés dans le même dossier. Au lieu de me retrouver avec 15-20 tâches (une pour chaque fichier), puis-je écrire quelque chose qui traitera chaque fichier situé dans ce répertoire. Et soit attendre que l'un d'eux soit terminé avant de passer au suivant, soit ajouter un délai de 3 minutes avant de lancer le fichier suivant.

32voto

Joey Points 148544
pushd C:\test\utils
for %%F in (F:\DB\*.xml) do (
   admin import-xml "-Dimport.file=%%~dpnxF" -Dadmin.db.password=test123
)
popd

En %%~dpnxF s'étend à d rive, p ath, base n ame et e x tension du fichier en cours.

Si vous avez l'intention de mettre et utiliser des variables d'environnement ( %foo% ) dans cette boucle, lisez help set d'abord avant d'avoir des problèmes.

8voto

Mark Wilkins Points 29291

Vous pouvez utiliser le for commandement. Quelque chose comme ça dans un fichier batch :

for %%f in (*.xml) do call myotherbatch.bat %%f

En supposant que le admin que vous exécutez ne revient pas tant que le travail n'est pas terminé, la boucle ci-dessus les traiterait séquentiellement.

Si vous exécutez la commande à l'invite (par opposition à un fichier batch), n'utilisez qu'un seul %.

0voto

dtmilano Points 26472
for file in f:\DB\*
do
   admin import-xml -Dimport.file="$file" -Dadmin.db.password=test123
done

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X