De hecho, la aritmética de marca de tiempo es un dolor. Ajustar la hora a UTC podría dar como resultado una fecha diferente, lo que significa que puede tener que preocuparse por cuántos días en el mes, y puede que tenga que preocuparse por los años bisiestos.
WMIC no tiene ninguna disposición integrada para formatear la marca de tiempo como UTC. Y el lote ciertamente no tiene prácticamente soporte para manejar la aritmética de fecha / hora.
He escrito una utilidad llamada JREN.BAT que puede resolver su problema fácilmente. Fue escrito principalmente para permitir el cambio de nombre de archivos / carpetas utilizando expresiones regulares. Pero tiene una funcionalidad adicional que puede resolver este problema.
JREN.BAT es un script puro (lote híbrido / JScript) que se ejecuta de forma nativa en cualquier máquina Windows desde XP en adelante, no se requiere un archivo exe de terceros. La documentación completa está disponible al ejecutar jren /?
desde el símbolo del sistema (o jren /??
para ayuda paginada)
Lo siguiente proporcionará la misma funcionalidad que su secuencia de comandos, excepto que mostrará correctamente la marca de tiempo como UTC.
@echo off
for /f "delims=" %%A in (
'jren "^.*" "ts({dt:'modified',tz:0})" /j /list /p "%~dp0" /fm %1'
) do set "ts=%%A"
echo %ts%
La salida estará en formato ISO 8601, sin puntuación, que se ordenará correctamente cronológicamente utilizando semántica de cadenas. Algo así como 20161006T155621.746+0000
.
Puede agregar fácilmente la opción fmt: a la llamada ts () para formatear la marca de tiempo de la forma que mejor le parezca. Utilícelo jren /?ts()
para obtener ayuda completa sobre todas las opciones disponibles para trabajar con marcas de tiempo.
Es muy simple usar JREN para proporcionar una lista completa de directorios con tiempos UTC.
A continuación se enumeran la última marca de tiempo, tamaño de archivo y nombre de archivo modificados para todos los archivos .txt que comienzan t
en el directorio actual.
D:\test>jren "^.*" "ts({dt:'modified',tz:0,fmt:'{iso-dt} {iso-tm}'})+size(' ')+' '+$0" /j /list /fm t*.txt
2015-06-22 19:11:22.134 74 temp1.txt
2015-06-22 19:11:22.259 0 temp2.txt
2015-06-22 19:11:22.384 0 temp3.txt
2016-09-07 15:20:08.146 10376 tempfile.txt
2016-10-06 15:56:21.746 14 test.txt
2015-06-22 19:11:23.600 342 text2.txt
2015-06-22 19:11:23.741 288 textfile1.txt
2015-06-22 19:11:23.866 144 textfile2.txt
2015-10-19 19:12:16.441 707 TL.txt
2016-01-13 17:35:17.505 1030 tl64.txt
2016-01-13 17:36:48.501 974 tl64_2.txt
2016-01-13 17:45:16.383 943 tl64_3.txt
2016-01-13 17:37:21.308 707 tl_1.txt
2016-01-13 17:37:30.356 707 tl_2.txt
2016-01-13 17:45:50.469 707 tl_3.txt
2015-06-22 19:11:24.006 42 tmp.txt
2015-06-22 19:11:24.427 541553 toc-z.txt
2015-08-31 20:59:25.202 17442083 tree.txt
2015-06-22 19:11:24.583 304 tsc_call_layout.txt
JREN usa WMI para obtener la última marca de tiempo modificada, que es bastante lenta. Dependiendo de la configuración de su idioma, puede usar fsomodified
, en lugar de modified
, obtener la marca de tiempo usando FileSystemObject. Esto es mucho más rápido, pero no proporciona milisegundos, y solo funciona si su lenguaje formatea las cadenas de marca de tiempo de una manera que pueda ser interpretada por el objeto de fecha JScript.
D:\test>jren "^.*" "ts({dt:'fsomodified',tz:0,fmt:'{iso-dt} {hh}:{nn}:{ss}'})+size(' ')+' '+$0" /j /list /fm t*.txt
2015-06-22 19:11:22 74 temp1.txt
2015-06-22 19:11:22 0 temp2.txt
2015-06-22 19:11:22 0 temp3.txt
2016-09-07 15:20:08 10376 tempfile.txt
2016-10-06 15:56:21 14 test.txt
2015-06-22 19:11:23 342 text2.txt
2015-06-22 19:11:23 288 textfile1.txt
2015-06-22 19:11:23 144 textfile2.txt
2015-10-19 19:12:16 707 TL.txt
2016-01-13 18:35:17 1030 tl64.txt
2016-01-13 18:36:48 974 tl64_2.txt
2016-01-13 18:45:16 943 tl64_3.txt
2016-01-13 18:37:21 707 tl_1.txt
2016-01-13 18:37:30 707 tl_2.txt
2016-01-13 18:45:50 707 tl_3.txt
2015-06-22 19:11:24 42 tmp.txt
2015-06-22 19:11:24 541553 toc-z.txt
2015-08-31 20:59:25 17442083 tree.txt
2015-06-22 19:11:24 304 tsc_call_layout.txt