web-dev-qa-db-fra.com

Impression de la date et de l'heure actuelles dans un script DOS

J'ai un script qui imprime la date et l'heure suivies d'une chaîne dans un journal.

echo %DATE%_%TIME% Processing %%f >> process.log

Le problème est que la date et l'heure sont toujours la date et l'heure de démarrage du script. J'ai exécuté le script pendant la nuit et j'ai toujours la même date et heure. Existe-t-il un moyen de les mettre à jour pour qu'il affiche la date et l'heure actuelles lorsque la chaîne est imprimée dans le fichier journal?

14
Rayne

Le fait que vous ayez %%f indique que votre commande echo est dans une boucle FOR. La boucle FOR entière est analysée à la fois, et %DATE% est développé au moment de l'analyse. La commande n'est pas ré-analysée pour chaque itération, c'est pourquoi vous obtenez la même valeur pour chaque itération. Vous obtenez la valeur qui existait avant l'exécution de l'instruction FOR!

La solution est une expansion retardée. Mettez setlocal enableDelayedExpansion en haut de votre script. Utilisez ensuite !DATE!_!TIME! au lieu de %DATE%_%TIME%. Une expansion retardée signifie que l'expansion se produit lorsque l'instruction est exécutée, et non lorsqu'elle est analysée. Il y a une bonne explication dans le système HELP. Tapez HELP SET ou SET /? à partir d'une invite de commande et recherchez la section qui traite de l'expansion retardée.

34
dbenham