Има ли някакъв начин за търсене на файлове в директория въз основа на дата? Искам да намеря всички файлове със създадена дата, по-голяма от конкретна дата, възможно ли е да го направя с команда 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