2012-02-10 192 views
13

有什麼方法可以根據日期搜索目錄中的文件嗎?我想查找創建日期大於特定日期的所有文件,是否可以使用dir命令執行此操作?使用命令行按日期搜索

+0

'DIR/OD'會按日期排序,至少 – nolegs 2012-02-10 20:17:50

+1

目錄不能,但Unix的find命令*可*。 [Dos port available here](http://sourceforge.net/projects/unxutils/) – 2012-02-10 21:59:06

+0

http://superuser.com/a/326025/3588在SuperUser是一個優雅的解決方案,使用'xcopy'而不需要實際複製 – 2015-09-01 23:50:26

回答

4

dir本身不能按日期進行篩選,但您可以使用for命令解析dir的輸出。如果您的國家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 
) 
+0

謝謝你,這就是我需要的,我可以使用小時:分鐘比較。最後是有幫助的書籍來學習shell腳本。 – developer 2012-02-12 15:30:26

+0

要使用分鐘進行比較,請執行以下更改:'tokens = 1,2,4'然後'if %% A %% B「GTR」2012-02-05 11:23「echo %% A %% B %% C' 要學習,您可以從http://en.wikipedia.org/wiki/Batch_file開始,然後繼續使用三個第一個外部鏈接。 – MBu 2012-02-12 21:00:04

3

那麼你不能因爲據我所知,但這種思考的工作,但還是很沒用的,除非你有一個簡短的日期範圍;)

for /R %a in (01 02 03 04 05) do dir | find "02/%a/2012" 
+0

不錯!使用'dir/tc'來處理創建日期。 – Marc 2016-08-12 09:49:05

35

剛剛發現forfiles命令。

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

將列出所有修改超過七天的日誌文件,在所有子目錄,但它似乎並沒有看創建日期。它確實支持指定一個特定的日期。

有關更多信息,請參閱forfiles /?

+0

超級有用! (當沒有PowerShell可用時)注意:如果你想在一個日期之後修改文件,你需要用'+'而不是'-'作爲'/ d'參數,所以'+ 02/05/2012'而不是'-7 '。還要顯示每個文件的日期和時間輸出,你可以使用'cmd/c echo @fdate @ftime @ path' – bob 2013-07-10 14:58:06

+4

+1這應該是被接受的答案 – 2014-02-19 01:07:22

+1

警告:有些人希望使用UNC路徑。或在Windows中的許多其他地方... – 2016-06-21 16:06:18

0

這很容易與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

+0

我試過了:dir。 * .svg | ? LastWriteTimeUtc -gt([datetime]「2013-05-01」)但收到「Where-Object:無法綁定參數'FilterScript'。無法將類型爲」System.String 「的」LastWriteTimeUtc「值轉換爲鍵入」System.Management .Automation.ScriptBlock「。 – 2014-10-01 11:23:53

+0

我使用的語法適用於PS 3.0以上,我相信如果你有PS 1.0或2.0,你必須使用如下的scriptblock:'|?{$ _。LastWriteTimeUtc -gt([datetime] 「2013-05-01」)}' – bouvierr 2014-10-01 11:37:44

+0

啊我在Windows 7上用PS 2.謝謝 – 2014-10-01 16:56:09

2

對我來說更簡單的方法是一樣的東西

dir /s *.xlsx | find "07/14/2016"