Действительно, арифметика меток времени - это боль. Настройка часов на 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