Действительно, арифметика меток времени - это боль. Настройка часов на UTC может привести к другой дате, что означает, что вам, возможно, придется беспокоиться о количестве дней в месяце, а также о високосных годах.
WMIC не имеет встроенных положений для форматирования метки времени как UTC. И партия, конечно, практически не поддерживает обработку арифметики даты / времени.
Я написал утилиту под названием JREN.BAT, которая может легко решить вашу проблему. Первоначально он был написан для переименования файлов / папок с использованием регулярных выражений. Но у него есть дополнительная функциональность, которая может решить эту проблему.
JREN.BAT - это чистый скрипт (гибридный пакет /JScript), который работает на любом компьютере под управлением Windows начиная с XP и не требует запуска стороннего exe-файла. Полная документация доступна при выполнении jren /? из командной строки (или jren /?? за постраничную помощь)
Следующее обеспечит ту же функциональность, что и ваш скрипт, за исключением того, что оно будет правильно отображать метку времени как 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%
Выходные данные будут в формате ISO 8601 без знаков препинания, что позволит правильно сортировать их в хронологическом порядке с использованием семантики строк. Что-то вроде 20161006T155621.746+0000 .
Вы можете легко добавить опцию fmt: к вызову ts(), чтобы отформатировать временную метку любым удобным для вас способом. Используйте jren /?ts() чтобы получить полную справку по всем параметрам, доступным для работы с отметками времени.
Использовать JREN очень просто, чтобы предоставить полный список каталогов с временем UTC.
Ниже перечислены последние измененные временная метка, размер файла и имя файла для всех файлов .txt, которые начинаются с t в текущем каталоге.
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 использует WMI для получения последней измененной временной метки, что довольно медленно. В зависимости от настроек языка вы можете использовать fsomodified вместо modified , чтобы получить метку времени с помощью FileSystemObject. Это намного быстрее, но не дает миллисекунд и работает только в том случае, если ваш язык форматирует строки меток времени таким образом, который может быть интерпретирован объектом даты 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