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 ten 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