2012-09-21 9 views
12

Ho uno script che stampa la data e l'ora seguite da una stringa in un registro.Stampa data e ora correnti nello script DOS

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

Il problema è che la data e l'ora sono sempre la data e l'ora in cui viene avviato lo script. Ho eseguito lo script durante la notte, e ho ancora la stessa data e ora. C'è un modo per aggiornarli in modo che mostri la data e l'ora corrente in cui la stringa viene stampata nel file di registro?

risposta

32

Il fatto che si disponga di %%f indica che il comando echo si trova in un ciclo FOR. L'intero ciclo FOR viene analizzato in una sola volta e %DATE% viene espanso in fase di analisi. Il comando non viene nuovamente analizzato per ogni iterazione, quindi è per questo che si ottiene lo stesso valore per ciascuna iterazione. Ottieni il valore che esisteva prima dell'esecuzione dell'istruzione FOR!

La soluzione è in ritardo di espansione. Inserisci setlocal enableDelayedExpansion nella parte superiore dello script. Quindi utilizzare !DATE!_!TIME! anziché %DATE%_%TIME%. Espansione ritardata significa che l'espansione si verifica quando l'istruzione viene eseguita, non quando viene analizzata. C'è una buona spiegazione nel sistema HELP. Digitare HELP SET o SET /? da un prompt dei comandi e cercare la sezione che riguarda l'espansione ritardata.