Есть ли способ поиска файлов в каталоге по дате? Я хочу найти все файлы с датой создания больше определенной даты, можно ли это сделать с помощью команды dir
?
Поиск по дате с помощью командной строки
Ответы (5)
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
РЕДАКТИРОВАТЬ: Существует еще лучший подход, который позволяет избежать разбора вывода dir
, а также позволяет выполнять поиск по времени, а не только по дате:
@Echo Off
for /r %%A in (*) do (
if "%%~tA" GTR "2012-02-05 00:00" echo %%~tA %%A
)
tokens=1,2,4
, а затем if "%%A %%B" GTR "2012-02-05 11:23" echo %%A %%B %%C
Чтобы узнать, вы можете начать с en. wikipedia.org/wiki/Batch_file, а затем продолжите с тремя первыми внешними ссылками.
- person MBu; 13.02.2012
Только что обнаружил команду forfiles
.
forfiles /s /m *.log /d -7 /c "cmd /c echo @path"
Отобразит все файлы журналов, измененные старше семи дней, во всех подкаталогах, хотя дата создания не отображается. Он поддерживает указание конкретной даты.
См. forfiles /?
для получения дополнительной информации.
+
вместо -
для параметра /d
, поэтому что-то вроде +02/05/2012
вместо -7
. Также, чтобы показать вывод даты и времени для каждого файла, вы можете использовать cmd /c echo @fdate @ftime @path
- person bob; 10.07.2013
FORFILES /D
работает только с измененными датами. Чтобы решить проблемы с UNC, просто используйте MKLINK /D
.
- person Marc; 12.08.2016
/d +7
покажет вам файлы, измененные менее семи дней назад, нет. Он покажет вам файлы, измененные через семь дней. Вы должны использовать дату, например +02/05/2012
.
- person Noumenon; 07.11.2017
более простой способ для меня что-то вроде
dir /s *.xlsx | find "07/14/2016"
Ну, вы не можете, насколько я знаю, но такой способ мышления будет работать, но все же действительно бесполезен, если у вас нет короткого диапазона дат;)
for /R %a in (01 02 03 04 05) do dir | find "02/%a/2012"
Это легко сделать с помощью 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.
| ? {$_.LastWriteTimeUtc -gt ([datetime]"2013-05-01")}
- person bouvierr; 01.10.2014
dir /OD
будет сортировать по дате, по крайней мере - person nolegs   schedule 11.02.2012xcopy
без фактического копирования - person CAD bloke   schedule 02.09.2015