2012-01-17 75 views
1

我試圖使用DOS DIR/TW開關不能正常工作

dir /b /tw /od controlfile olderfile | more +1 

其修改的時間戳比較文件的列表,包括控制文件本應返回controlfile作爲olderfile修改日期是早於controlfile。但它似乎是在創建日期(olderfile的創建日期在controlfile之後)進行比較,因此將始終返回olderfile/tw開關應該告訴dir使用上次寫入的日期(從dir /?),所以我不確定我做錯了,如果我想/ tw按記錄工作?

:UPDATE:

到現在爲止我相對於controlfile子文件夾有olderfile。當我將olderfile複製到與controlfile相同的目錄時,比較按預期工作 - 即上述命令返回controlfile。因此,在子文件夾中顯然會破壞比較(即使子文件夾修改日期與olderfile本身相比早於controlfile時更早)。

所以我現在的問題是我該如何解決這個給定的目錄結構是必需的?

回答

1

首先解釋爲什麼你的代碼失敗。

綜觀DIR而不/ B選項,它總是與該文件名顯示文件路徑作爲一個標題行,從未在一起。當在同一目錄中使用排序選項和兩個文件規範時,該命令可以對文件進行排序並將它們顯示在相同的目錄標題下。即使文件名重複,您也確切知道標題引用了哪個文件。

但如果2個文件規範是不同的路徑,有機會的話,文件名是一樣的,只是路徑不同。在這種情況下,除非每個文件規範都在自己的頭文件中進行排序否則你無法分辨哪個文件是哪個文件。對單個文件進行排序沒有多大意義,但請記住,文件規範可能包含通配符,因此它很有意義。因此,無論何時將排序選項與使用不同路徑的多個文件規格組合在一起,DIR都會爲每個路徑分別進行排序,每個路徑都有自己的標題。

添加/ B選項刪除路徑頭,但它不會改變排序的行爲!絕對是一個愚蠢而無用的設計,但這就是你得到的。

一個解決方案,到達更加有問題的,特別是如果你想使用純批次只有本地的Windows命令。處理日期可能會令批評生氣。

最方便的批量解決方案,我能想出是第二次臨時文件複製到父目錄,運行父目錄內的比較,然後刪除臨時副本。但是,如果文件很大,那可能會出現問題。它還假定文件名不存在於父目錄中。如果確實(或可能)存在,則可以將該文件複製到不同的名稱,這是已知的唯一。當然,你將不得不翻譯結果。

從我可以告訴,任何其他批次的解決方案將需要解析的日期和時間。這打開了一整罐蠕蟲。(這是可行的)

如果COPY建議是不可接受的(我不會責怪你,如果你決定不使用它),那麼我建議使用非批處理,可能是VBScript,Javascript或Powershell。或者可能是一些混合方法,如一批VBScript拋出。

+0

在我讀你的回覆之前,我正在把控制文件複製到目標目錄(所以第一個文件到子目錄中)。然後清理子目錄。這意味着不需要翻譯。或者有沒有一個原因,你說複製第二個文件,而不是反之亦然? – rutherford

+0

我看不出有任何區別。如果控制文件名稱已存在於子目錄中,則仍然存在問題。但是這聽起來似乎並非如此。 – dbenham