10
votes

Comment faire en boucle dans le fichier de lots Windows exécuté dans le nom de commande

J'ai un fichier de lots Windows qui fait ceci: xxx

mais la boucle pour traverse les fichiers aléatoirement (pas dans l'ordre de nom), il exécute d'abord S5.01, puis S4 .06, puis S4.08, puis S4.10, puis S4.07. Comment puis-je les faire courir dans l'ordre de nom?

Cela fonctionnait, mais maintenant ça ne le fait pas. Ce qui peut causer ce problème?


0 commentaires

3 Réponses :


2
votes

Si la mémoire sert, elle fonctionnera sur les fichiers de la commande à leur retour par le système de fichiers. En tant que tel, si vous l'exécutez sur une partition de disque qui est formatée avec NTFS, les noms seront renvoyés dans l'ordre trié afin qu'ils soient traités dans la commande triée. Si la partition de disque est formatée avec quelque chose comme la graisse ou le FAT32, les noms seront récupérés (et traités) dans un ordre plus ou moins aléatoire.


0 commentaires

10
votes

La réponse de Jerry pourrait très bien être ce qui cause le problème.

Vous pouvez le résoudre en modifiant

pour %% S dans (* .sql) appelez

à

pour %% S dans (DIR "*. SQL ^ | Sort) Appelez


EDIT CUDO'S À LONELYPIXEL

La solution postée ne fonctionne pas comme sur une machine Windows 8 (peut-être qu'elle a fait ensuite avec Windows XP mais je n'ai aucune idée) . < P> Voici une solution de travail utilisant l'invite de commande Windows 8. xxx


7 commentaires

Ou, pour / f "usebackq" %% s dans ("" * .sql / b / on`) appelez


Patrick, votre solution supprime tous les noms de fichiers après un espace, il n'est donc que partiellement utile.


Lieven, votre solution échoue complètement. Si je remplace le "par un espace, il trouve" dir "," | "et" trier "aussi. Pour que cela ne fonctionne pas non plus.


@LonelyPixel - J'ai mis à jour la réponse, mais comme je l'ai mentionné dans la modification, je n'ai aucune idée si elle a fonctionné à l'époque. (OP a accepté cela comme une réponse correcte pour que je suppose que cela a fait) .


@Patrickcuff pour les noms de fichiers avec des espaces, ajoutez jetons = , comme celui-ci: pour / f "userbackq jetons =" ​​%% S dans ( DIR "Mon travail Dir \ *. SQL "/ b / sur ) appelez .


Qu'en est-il de trier la taille ASC?


Le pour %% S dans (dir "*. SQL ^ | Sort) échoue sur Wineconsole avec" Plus? "



1
votes

J'ai aussi dû traiter des espaces dans les noms de fichiers, j'ai donc ajouté des citations autour de la variable d'entrée, comme:

SET "machineName=localhost"
for /f "tokens=*" %%f in ('dir /b PostDeployScripts\*.sql ^| sort') do sqlcmd -E -S%machineName% -i"PostDeployScripts\%%f"


0 commentaires