Поиск по дате с использованием командной строки - PullRequest
13 голосов
/ 11 февраля 2012

Есть ли способ поиска файлов в каталоге по дате? Я хочу найти все файлы с датой создания, превышающей конкретную дату, возможно ли это сделать с помощью команды dir?

Ответы [ 5 ]

39 голосов
/ 29 мая 2013

Только что обнаружил команду forfiles.

forfiles /s /m *.log /d -7 /c "cmd /c echo @path"

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

См. forfiles /? для получения дополнительной информации.

4 голосов
/ 11 февраля 2012

dir сам по себе не может фильтровать по дате, но вы можете проанализировать вывод dir с помощью команды for. Если в вашей стране dir печатает дату в формате YMD, вам нужно только сравнить ее с заданной датой. Если порядок частей даты отличается, то вам нужно использовать другую команду for, чтобы проанализировать дату и изменить ее на YMD. Появится список файлов, измененных после 5 февраля.

@Echo Off

for /f "usebackq tokens=1,4 skip=5" %%A in (`dir /-c`) do (
  if %%A GTR 2012-02-05 echo %%A %%B
)

if выполняет стандартное сравнение строк, поэтому в конце вы можете получить дополнительную строку, если итоговая строка пройдет сравнение. Чтобы избежать этого, вы можете использовать if %%A GTR 2012-02-05 if exist %%B echo %%A %%B

EDIT: Существует еще лучший подход, который позволяет избежать анализа вывода dir, а также позволяет выполнять поиск по времени, а не только по дате:

@Echo Off

for /r %%A in (*) do (
  if "%%~tA" GTR "2012-02-05 00:00" echo %%~tA %%A
)
3 голосов
/ 14 июля 2016

более простой способ для меня это что-то вроде

dir /s *.xlsx | find "07/14/2016"
3 голосов
/ 11 февраля 2012

Ну, насколько я знаю, вы не можете, но этот вид мышления будет работать, но все равно действительно бесполезен, если у вас нет короткого диапазона дат;)

for /R %a in (01 02 03 04 05) do dir | find "02/%a/2012"
0 голосов
/ 08 декабря 2013

Это легко сделать с помощью PowerShell. Я знаю, что ваш вопрос был о cmd, но PS включен в Windows 7 и позже. Он также может быть установлен на XP и Vista.

Используйте команду Get-ChildItem (псевдоним dir), чтобы получить все файлы. Передайте вывод в команду Where-Object (с псевдонимом ?), чтобы вернуть файлы, в которых дата больше (-gt) определенной даты.

Для Powershell 2.0 (по умолчанию в Windows 7) необходимо использовать блок сценариев:

dir -file | ? {$_.LastWriteTimeUtc -gt ([datetime]"2013-05-01")}

Для Powershell 3.0 (по умолчанию в Windows 8) и выше вы можете использовать вместо этого следующий более простой синтаксис:

dir -file | ? LastWriteTimeUtc -gt ([datetime]"2013-05-01")

Команда dir -file возвращает коллекцию объектов System.IO.FileInfo. Этот файловый объект имеет много свойств, которые вы можете использовать для сложной фильтрации (размер файла, дата создания и т. Д.). См. MSDN для документации.

...