Какой из моих файлов “user.config” самый последний?

Вопрос или проблема

Мое приложение регулярно записывает файл “user.config”. В результате у меня может быть несколько таких файлов, как вы можете видеть здесь:

C:\Users\DDM\AppData\Local\Microsoft\Application.exe_Url_0pxm4tjihtf4gojic1ie1emq0ikpux0l\1.0.0.0\user.config
C:\Users\DDM\AppData\Local\Microsoft\Application.exe_Url_2b3b4tyfmzkmjhm51ejgkixpxa1mj5mv\1.0.0.0\user.config
C:\Users\DDM\AppData\Local\Microsoft\Application.exe_Url_35225euvnelhwk1uagjvfdpuat5ri4pq\1.0.0.0\user.config
C:\Users\DDM\AppData\Local\Microsoft\Application.exe_Url_5n2gl0ysqrdxoqfoamypqiowrjzi1urz\1.0.0.0\user.config

Поскольку эти файлы находятся внутри директории “AppData”, поиск Windows не работает:
Скриншот

Есть ли какой-либо параметр или переключатель, который я могу добавить к DIR /S, чтобы добавить дату последнего изменения (как ls -l в UNIX)?

Спасибо заранее

Редактировать: попытка forfiles:
Тем временем я изобрел следующую команду forfiles:

forfiles /S /M user.config /C "cmd /c echo @path ":" @fdate, @ftime"

Однако это вызывает множество ошибок “Доступ запрещен”.

Есть ли 2>/dev/null, как в UNIX?

Есть ли какой-либо параметр или переключатель, который я могу добавить к DIR /S, чтобы добавить дату последнего изменения (как ls -l в UNIX)?

Встроенная команда dir в Cmd уже отображает это по умолчанию. Вы, вероятно, скрыли это, используя /B в своем скрипте.

Аналогично, команда PowerShell Get-ChildItem возвращает объекты, у которых есть свойство .LastWriteTime (также отображается по умолчанию).

dir ~\AppData\Local\Microsoft\Application.exe_*\1.0.0.0\user.config | select LastWriteTime, FullName

Есть ли 2>/dev/null, как в UNIX?

Есть, но нулевое устройство – это NUL или NUL:. (Технически также \\.\GLOBALROOT\Device\Null или что-то в этом роде, но я не думаю, что это работает в Cmd.)

Я думаю, что PowerShell предпочитает 2> $null (потоки в PowerShell странные).

Я только что нашел следующее: 2>nul.
Я проверил это, и это сработало:

forfiles /S /M user.config /C "cmd /c echo @path ":" @fdate, @ftime" 2>nul

Это дает список файлов, который я искал, без каких-либо сообщений об ошибках.

Ответ или решение

Чтобы определить, какой из файлов "user.config" является последним по времени изменения, необходимо использовать правильные инструменты и команды Windows, так как стандартный поиск Windows по умолчанию не охватывает директорию AppData.

Использование команды DIR

По умолчанию команда DIR уже выводит дату и время последнего изменения файлов. Для этого просто выполните следующую команду:

DIR "C:\Users\DDM\AppData\Local\Microsoft\Application.exe_*\1.0.0.0\user.config"

Однако, если вы хотите более подробный вывод, например, для упрощённой обработки информации, можно использовать другие подходы.

Использование forfiles

Вы нашли хороший способ использовать forfiles для сбора информации о файлах. Вот пример команды:

forfiles /S /M user.config /C "cmd /c echo @path : @fdate @ftime" 2>nul

Эта команда будет искать все файлы с именем "user.config" в указанной директории и её подкаталогах, выводить путь к файлу, дату и время последнего изменения, при этом игнорируя сообщения об ошибках (например, "Access Denied"). Описание параметров:

  • /S — рекурсивный поиск в подкаталогах.
  • /M user.config — фильтрация по имени файла.
  • /C — команда, которая будет выполнена для каждого найденного файла.
  • 2>nul — перенаправление сообщений об ошибках в «черную дыру», так называемое устройство NUL.

Использование PowerShell

Если вы предпочитаете более гибкий подход, PowerShell предоставляет дополнительные возможности. Например, следующая команда позволяет вывести время последнего изменения файлов в удобном формате:

Get-ChildItem ~\AppData\Local\Microsoft\Application.exe_*\1.0.0.0\user.config | Select-Object LastWriteTime, FullName

Выбор последнего изменения

Теперь, когда у вас есть список всех файлов "user.config" с датами последнего изменения, определите файл с самой поздней датой. Для этого можно использовать команду PowerShell:

Get-ChildItem ~\AppData\Local\Microsoft\Application.exe_*\1.0.0.0\user.config | Sort-Object LastWriteTime -Descending | Select-Object -First 1

Заключение

Таким образом, чтобы определить, какой из файлов "user.config" является последним, вы можете использовать как команду forfiles, так и PowerShell, в зависимости от ваших предпочтений. Метод с PowerShell может быть более удобным и предлагает больше возможностей для дальнейшей обработки данных, в то время как forfiles является более простым и прямолинейным вариантом для быстрых задач.

Оцените материал
Добавить комментарий

Капча загружается...