Na verdade, a aritmética de timestamp é uma dor. Ajustar a hora para UTC pode resultar em uma data diferente, o que significa que você pode ter que se preocupar com quantos dias no mês e talvez precise se preocupar com anos bissextos.
O WMIC não possui nenhuma disposição interna para formatar o registro de data e hora como UTC. E lote certamente não tem praticamente nenhum suporte para lidar com aritmética de data / hora.
Eu escrevi um utilitário chamado JREN.BAT que pode resolver sua problema facilmente. Foi escrito principalmente para permitir renomear arquivos / pastas usando expressões regulares. Mas tem funcionalidades extras que podem resolver este problema.
O JREN.BAT é um script puro (lote híbrido / JScript) que é executado nativamente em qualquer máquina Windows do XP em diante - não é necessário nenhum arquivo exe de terceiros. A documentação completa está disponível executando jren /?
no prompt de comando (ou jren /??
para ajuda paginada)
O seguinte fornecerá a mesma funcionalidade do seu script, exceto que exibirá corretamente o registro de data e hora 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%
A saída estará no formato ISO 8601, sem pontuação, que será classificada corretamente em ordem cronológica usando a semântica de string. Algo como 20161006T155621.746+0000
.
Você pode adicionar facilmente a opção fmt: à chamada ts () para formatar o registro de data e hora da maneira que achar melhor. Use jren /?ts()
para obter ajuda completa sobre todas as opções disponíveis para trabalhar com registros de data e hora.
É muito simples usar o JREN para fornecer uma lista completa de diretórios com os horários UTC.
As listas a seguir modificam a data e hora, o tamanho e o nome do arquivo para todos os arquivos .txt que começam com t
no diretório atual.
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
O JREN usa o WMI para obter o último registro de data e hora modificado, o que é bastante lento. Dependendo da sua configuração de idioma, você poderá usar fsomodified
, em vez de modified
, para obter o registro de data e hora usando o FileSystemObject. Isso é muito mais rápido, mas não fornece milissegundos, e só funciona se o seu idioma formatar cadeias de registro de data e hora de uma maneira que possa ser interpretada pelo objeto de data do 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