Быстрая встроенная команда, чтобы получить дату последнего изменения файла в Windows?

504
AlexRamallo

Я пытаюсь получить дату последнего изменения группы файлов в Windows. В системах GNU я могу просто использовать что-то вроде stat -c %Y.

Я знаю о wmicкоманде, но проблема в том, что она очень медленная. В моей системе выполнение команды wmic datafile where Name="..." get LastModified /valueпримерно в 4-7 раз медленнее, чем при использовании порта GNU stat в оболочке MSYS2.

Для моих целей мне нужна альтернатива, более быстрая и встроенная либо для самой Windows, либо для средств разработки Visual Studio. Меня не волнует формат вывода, потому что я могу сам разобрать его вручную.

Кто-нибудь знает, существует ли что-то подобное?

1
Вы почти наверняка можете найти в Windows порт `stat` (ищите` "stat.exe" `). Если нет, то это всего лишь несколько строк C для записи. AFH 6 лет назад 0
@AFH Проблема в том, что мне нужно решение, встроенное либо в Windows, либо в средства разработки VS. Я искал, но wmic - единственное, что я нашел. AlexRamallo 6 лет назад 0
Если у вас есть VS, напишите программу самостоятельно (вызовите `stat ()` или `lstat ()`, в зависимости от того, как вы хотите обрабатывать символические ссылки). Или, возможно, это просто в PowerShell, но я никогда не использовал это более, чем минимально. AFH 6 лет назад 0
Когда я говорю «встроенный», я имею в виду, что мне нужно то, что уже доступно. Конечно, я мог бы написать свой, но для того, что я делаю, это не подходящее решение. Я пишу сценарий, который нужно развернуть на куче компьютеров под управлением Windows с минимально установленными средствами разработки VS. Пакетирование исполняемой программы или, что еще хуже, исходного кода, который необходимо собрать, не будет работать для моей конкретной ситуации. Powershell - это то, о чем я раньше не думал, поэтому я просто попробовал это. К сожалению, это на самом деле намного медленнее, чем команда wmic. AlexRamallo 6 лет назад 0
Если это не сложно в контексте локальной безопасности или антивирусных политик, я не могу понять, почему вы не должны распространять исполняемый файл со своим скриптом. Если ПК установлен на Windows 10, подсистема Linux on Windows уже будет `stat`. Вы можете вызвать его с помощью `bash -c`, хотя вам нужно будет использовать Linux, а не имя файла Windows. AFH 6 лет назад 0

1 ответ на вопрос

3
DrMoishe Pippik

Окно командной строки DIR должно выполнить эту работу, если вы можете проанализировать вывод по полю. Передайте вывод в файл по мере необходимости.

Например, dir / o: d / t: w упорядочивает файлы по дате [/ o: d], используя последнее записанное, т.е. измененное) поле [/ t: w] и производит следующее:

Каталог C: \ Intel \ Logs

06.07.2016, 22:28 ..

06.07.2016, 22:28 0 IntelCPHS.log

13.05.2017 22:01 767 814 IntelGFX.log

17.10.2017 22:54 51 608 IntelGFXCoin.log

Если вам нужно время для второго, попробуйте:

forfiles / c "cmd / c echo @file @ftime"

Введите dir /? чтобы увидеть варианты просмотра файлов определенных атрибутов, выходного формата и т. д.

Отлично - я не знал о параметрах `@ ...` в `ForFiles`. Жаль, что вам нужно запланировать новую копию `cmd` просто чтобы сделать эхо. В Linux `echo` и некоторые другие внутренние команды также имеют внешние двоичные файлы, чтобы избежать этого, но я не знаю стандартной команды Windows, которая будет делать эквивалент. AFH 6 лет назад 0