Las variables de entorno %DATE%
y %TIME%
proporcionan la fecha y hora actuales en máquinas Windows en la línea de comando y dentro de un archivo por lotes.
Lamentablemente, esos valores son locales! Lo que significa que, por ejemplo, en una máquina alemana, obtendrá
26.1.2011
en lugar de
2011-26-01
esto arruina la clasificación si desea utilizar esta variable en un nombre de archivo.
¿Hay alguna manera fácil de obtener una YYYY-MM-DD
cadena de fecha desconocida en un archivo por lotes de Windows?
Por el momento, estoy trabajando con esta solución poco clara:
for /f "tokens=1,2,3,4 delims=. " %%i in ('date /t') do set date=%%k-%%j-%%i
echo %date%
pero esto ahora es específico de la localidad alemana: obviamente, una solución completamente independiente sería mucho mejor.
El sistema operativo en cuestión es Server 2008. Preferiría no utilizar una herramienta de terceros, si es posible.
for /f %%x in ('wmic os get localdatetime ^| findstr /b [0-9]') do @set X=%%x
es un poquito más agradable. También hay una versión más compacta disponible aquí , es decir, en ese comentario .findstr
solución es mucho mejor, en mi caso, el originalfor
(sin elskip
) itera 3 veces. Una vez para la palabra"LocalDateTime"
, una segunda vez para la fecha real y una tercera para un valor vacío (¿tal vez un salto de línea?).Aquí hay dos líneas que he estado usando, que parece funcionar independientemente de la versión de Windows o la configuración de la hora local:
Esto establecerá una variable llamada% CUR_DATE% en el siguiente formato estándar ISO:
Intenté convertirlo en una línea con &&, pero no pareció tomarlo, así que recurrí a la versión de dos líneas. Espero que esto ayude.
fuente
Yo uso este truco para obtener UTC ..
Sin embargo, tiene el efecto secundario de cambiar brevemente todo el sistema a UTC. Esto probablemente esté bien en una estación de trabajo personal, pero no estoy seguro de cuál sería el impacto en un servidor de producción grande, que probablemente debería configurarse en UTC de todos modos.
fuente