217 votes

Comment effectuer une boucle sur les fichiers correspondant à caractère générique dans le fichier de commandes

J'ai un set de base de noms de fichiers, pour chaque nom de 'f' il y a exactement deux fichiers, 'f.dans' et 'f.". Je veux écrire un fichier de commandes (sous Windows XP), qui passe en revue tous les noms de fichiers, pour chacune d'elle, il doit:

  • Afficher le nom de la base 'f'
  • Effectuer une action sur 'f.dans'
  • Effectuer une autre action sur 'f."

Je n'ai pas de moyen de la liste de l'ensemble de la base de noms de fichiers, autres qu'à rechercher *.dans (ou *.out) par exemple.

Mon, n'est-ce pas Stackoverflow me rendre paresseux à comprendre les choses!! :)

327voto

Jim Buck Points 10839

En supposant que vous avez deux programmes ce processus les deux fichiers process_in.exe et process_out.exe :

110voto

Mark Ingram Points 24995

Vous pouvez utiliser cette ligne pour imprimer le contenu de votre bureau:

FOR %%c in (C:\windows\desktop\*.*) DO echo %%c 

Une fois que vous avez l' %%variable c, il est facile d'effectuer une commande sur elle (il suffit de remplacer le mot de l'écho avec votre programme)

Je ne suis pas sûr de savoir comment cela fonctionne avec des variables locales, mais si vous voulez juste le nom de fichier sans extension, vous pouvez faire ceci:

%~n1

ou nom + extension:

%~nx1

etc

Voici quelques liens qui pourront vous aider:

http://gobruen.com/progs/dos_batch/dos_batch.html

7voto

Nathan Fritz Points 825

Manière la plus facile, comme je le vois, est d'utiliser une boucle for qui appelle un deuxième fichier de commandes pour le traitement, en passant que le second fichier, le nom de base.

Selon la for /? aider, basename peut être extraite à l'aide de la chouette ~n option. Ainsi, le script va lire:

for %%f in (*.in) do call process.cmd %%~nf

Ensuite, dans le processus.cmd, supposons que %0 contient le nom de base et d'agir en conséquence. Par exemple:

echo The file is %0
copy %0.in %0.out
ren %0.out monkeys_are_cool.txt

Il pourrait y avoir une meilleure façon de le faire dans un script, mais j'ai toujours été un peu flou sur la façon de tirer de plusieurs commandes en une seule boucle for dans un fichier de commandes.

EDIT: C'est fantastique! Je n'avais pas la page dans la documentation qui a montré que l'on pouvait faire de multi-blocs de lignes dans une boucle FOR. Je vais allez avoir à revenir en arrière et réécrire certains fichiers batch maintenant...

4voto

Martin Points 15155

Examant Nathans post. Ce qui suit va faire le lot de travail dans un fichier.

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