2010-07-13 45 views
0

我有一個Windows箱和文件夾中包含此類文件:如何將除最新的文件之外的所有文件移動到文件夾?

2010-07-04 20:18    81 in01_Acct_20100704001.r 
2010-07-07 05:45    165 in01_Acct_20100706001.r 
2010-07-07 19:41    82 in01_Acct_20100707001.r 
2010-07-07 10:02    81 in01_Acct_20100707002.r 
2010-07-08 08:31    89 in01_Acct_20100708001.r 
2010-07-10 04:51    82 in01_Acct_20100709001.r 

,我想使用批處理定期所有這些文件移動到另一個文件夾中,除了最新的一個(即in01_Acct_20100709001.r),因爲這文件有時仍在寫入,並且移動它可能導致批處理的下一次運行中的目標文件夾中的文件覆蓋,並導致文件內容丟失。

任何關於這種情況下的想法將不勝感激。

+0

你現在的代碼是什麼? – 2010-07-13 19:32:29

+0

當前的代碼是移動* .r D:\ destination \。我知道這是錯誤的,但我不知道如何在Windows下做到這一點...... – suyao 2010-07-13 19:55:00

+0

它是哪個版本的Windows?如果你可以使用powershell,那麼這可能會使編程更容易。 – 2010-07-13 20:27:06

回答

3

我覺得這個批處理腳本可以做到這一點:

dir /TW /O-D /A-D /B > %TEMP%\tempFiles.txt 
for /F "skip=1" %f IN (%TEMP%\tempFiles.txt) DO mv %f wherever 
del %TEMP%\tempFiles.txt 

爲了解釋這是什麼一樣:

  1. 不會對文件的列表,排序 通過修改的時間(最新的在前)「/ TW/OD「,跳過目錄」/ AD「,並在 中存儲一個臨時文件。
  2. 遍歷臨時文件的每一行,跳過 的第一行(最新文件),對每個行執行mv命令 。
  3. 刪除您的臨時文件。

編輯: 按照註釋,這裏是一個行版本 - 你可以插入DIR命令到你的for循環:

for /F "skip=1" %f IN ('dir /TW /O-D /A-D /B') DO mv %f wherever 
+1

他不能使用表示法以跳過將dir輸出寫入文件? – 2010-07-13 21:10:52

+0

@roguenot:對,你是第一次嘗試它,我錯誤地使用了「字符而不是」,它沒有工作 – zdan 2010-07-13 21:18:45

+0

它完全有效,謝謝!Ďakujem! – suyao 2010-07-13 21:57:38

0

查看Windows for命令行功能(你會對使用'command'的/ F操作符感興趣)。您應該可以使用dir的/ b和/ o選項來生成所需的文件列表。然後使用一個變量跳過第一個(即最新的,假設你的排序順序是正確的),應該是這樣。我目前不在我的Windows PC上,所以很抱歉,我無法用勺子餵給你確切的答案:)

相關問題