2012-09-21 19 views
12

Tengo un script que imprime la fecha y la hora seguidas de una cadena en un registro.Imprime la fecha y la hora actuales en el script de DOS

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

El problema es que la fecha y la hora siempre son la fecha y la hora en que se inicia el script. He estado ejecutando el script de la noche a la mañana, y aún tengo la misma fecha y hora. ¿Hay alguna forma de actualizarlos para que muestre la fecha y la hora actuales cuando la cadena se imprime en el archivo de registro?

Respuesta

32

El hecho de que tenga %%f indica que su comando de eco está en un bucle FOR. Todo el bucle FOR se analiza a la vez, y %DATE% se expande en el tiempo de análisis. El comando no se vuelve a analizar para cada iteración, por lo que se obtiene el mismo valor para cada iteración. ¡Obtiene el valor que existía antes de que se ejecute la instrucción FOR!

La solución es la expansión demorada. Ponga setlocal enableDelayedExpansion cerca de la parte superior de su secuencia de comandos. Luego use !DATE!_!TIME! en lugar de %DATE%_%TIME%. La expansión retrasada significa que la expansión ocurre cuando se ejecuta la declaración, no cuando se analiza. Hay una buena explicación en el sistema de AYUDA. Escriba HELP SET o SET /? desde un símbolo del sistema y busque la sección que trata sobre la expansión retrasada.

Cuestiones relacionadas