2014-09-12 110 views
0

我想做一個簡單的批處理腳本,比較4個不同目錄中的4個文件,並將「上次修改」文件放入一個變量中。我就用「目錄」是排序和使用的修改日期排序它最接近的:如何獲取多個目錄中文件的最後修改日期?

for /f "tokens=*" %%G in ('dir *.txt /b /s /a-d /od C:\testing ') do SET newest1=%%G 

然而,這隻能在一個目錄中工作。所以我的問題是,如何確定最後修改的文件來自多個目錄(實際上需要四個不同的文件夾)。

我已經試過:

FOR /F %%i IN ('DIR /b /s /O:D /T:W C:\testing\test1\test.txt C:\testing\test2\test2.txt') DO SET NEWEST=%%i 

但是,這並不與多個目錄工作。我猜測,因爲我正在處理多個目錄,排序不起作用,所以我還能使用什麼?

一些注意事項:

  • 需要將文件比較精確到秒

  • 某些文件可以得到相當大的,所以將它們複製所有到另一個文件夾,然後比較它們將需要太長時間,它效率不高

+1

這些文件是否有共同的文件規格?有關文件的詳細信息可以幫助您獲得最簡單的解決方案。如果這些文件位於同一個驅動器上,那麼移動操作是非常迅速的操作,它們可以被移回 - 但我們對這些文件知之甚少。 Robocopy也可以用來獲取最新的文件 - 取決於文件的位置。 – foxidrive 2014-09-13 07:36:02

+0

你說「4個文件」 - 所以你知道文件名 - 或者是文件名變量? – Magoo 2014-09-13 08:19:08

回答

2

如果您的系統是Windows Vista或更高版本(或者如果您可以下載Windows Server 2003 Resource Kit Too ls),您可以使用robocopy將4個文件複製到一個文件夾中。是的,我收回了筆記。技巧是,robocopy中的/create開關在目標文件夾中生成一個0字節的文件實例,但保留文件的時間戳。然後你可以使用你的第一個代碼來解決這個問題

如果您不能使用ROBOCOPY,但administrador權利是沒有問題的

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    for %%f in (
     "c:\\somewhere\\file1.txt" 
     "c:\\other\\place\\file2.txt" 
     "c:\\somewhere\\file2.txt" 
    ) do for /f "tokens=2 delims==." %%a in (' 
     wmic datafile where name^="%%~f" get lastModified /value 
    ') do set "_t[%%a]=%%~f" 

    for /f "tokens=2 delims==" %%a in ('set _t[') do set "lastFile=%%a" 
    set "lastFile=%lastFile:\\=\%" 

    echo %lastFile% 

該代碼使用wmic來檢索文件的時間戳,店使用時間戳作爲索引的環境中的數組。然後檢索列表,這將按升序排列。數組中的最後一個元素是較新的文件。

+0

感謝您的快速響應。但是,您提供的代碼不適用於我(在具有管理權限的Windows 7計算機上對其進行測試)。我簡單地用實際文件替換文件名並試着運行它。它會出現以下錯誤三次:「沒有實例可用」。它在達到for語句時似乎失敗了。我已驗證路徑名稱是正確的,並且沒有空格/特殊字符。 – steven 2014-09-12 22:10:47

+0

@steven,我的錯,我沒有刪除所有的測試代碼,並且循環遍歷了一個不存在的文件(「wmic' answer」No Instance(s)Available「)。代碼已更新。無論如何,對於Windows 7,4個「robocopy」操作可能比4個查詢要快。 – 2014-09-13 07:24:17

+0

謝謝!爲我工作。 – steven 2014-09-14 20:50:41

相關問題