Есть ли способ поиска файлов в каталоге на основе даты? Я хочу найти все файлы с созданной датой больше определенной даты, возможно ли это сделать с помощью команды dir
?
Поиск по дате с использованием командной строки
Ответ 1
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
)
Ответ 2
Только что открыла команду forfiles
.
forfiles /s /m *.log /d -7 /c "cmd /c echo @path"
Перечислит все файлы журналов, измененные более семи дней назад, во всех подкаталогах, хотя он, похоже, не смотрит дату создания. Он поддерживает указание конкретной даты.
Подробнее см. forfiles /?
.
Ответ 3
Ну, вы не можете догадаться, насколько я знаю, но такое мнение будет работать, но все же бесполезно, если у вас нет короткого диапазона дат;)
for /R %a in (01 02 03 04 05) do dir | find "02/%a/2012"
Ответ 4
более простой способ для меня - это что-то вроде
dir /s *.xlsx | find "07/14/2016"
Ответ 5
Это легко сделать с 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 для документации.