Aquí hay una solución independiente de la configuración regional (cópiela en un archivo llamado SetDateTimeComponents.cmd):
@echo off
REM This script taken from the following URL:
REM http://www.winnetmag.com/windowsscripting/article/articleid/9177/windowsscripting_9177.html
REM Create the date and time elements.
for /f "tokens=1-7 delims=:/-, " %%i in ('echo exit^|cmd /q /k"prompt $d $t"') do (
for /f "tokens=2-4 delims=/-,() skip=1" %%a in ('echo.^|date') do (
set dow=%%i
set %%a=%%j
set %%b=%%k
set %%c=%%l
set hh=%%m
set min=%%n
set ss=%%o
)
)
REM Let's see the result.
echo %dow% %yy%-%mm%-%dd% @ %hh%:%min%:%ss%
Pongo todos mis scripts .cmd en la misma carpeta (% SCRIPTROOT%); cualquier script que necesite valores de fecha / hora llamará a SetDateTimeComponents.cmd como en el siguiente ejemplo:
setlocal
@echo Initializing...
set SCRIPTROOT=%~dp0
set ERRLOG=C:\Oopsies.err
:: Log start time
call "%SCRIPTROOT%\SetDateTimeComponents.cmd" >nul
@echo === %dow% %yy%-%mm%-%dd% @ %hh%:%min%:%ss% : Start === >> %ERRLOG%
:: Perform some long running action and log errors to ERRLOG.
:: Log end time
call "%SCRIPTROOT%\SetDateTimeComponents.cmd" >nul
@echo === %dow% %yy%-%mm%-%dd% @ %hh%:%min%:%ss% : End === >> %ERRLOG%
Como muestra el ejemplo, puede llamar a SetDateTimeComponents.cmd siempre que necesite actualizar los valores de fecha / hora. Ocultar el script de análisis de tiempo en su propio archivo SetDateTimeComponents.cmd es una buena forma de ocultar los detalles desagradables y, lo que es más importante, evitar errores tipográficos.