2012-01-08 79 views
4

我有一些東西,使每個晚上的文件與新的文件夾。有誰知道如何創建一個腳本,將最新/最新的文件夾的內容複製到網絡共享並覆蓋網絡共享中的任何文件和文件夾?一直在撓我的腦袋。複製最新/最新的文件夾窗口的內容

在此先感謝。

回答

7

像這樣的東西可能會成爲你的目的:

SET "src_root=D:\root\for\source\directories" 
SET "tgt_path=\\NETWORK\SHARE\target\path" 

DIR "%src_root%" /B /AD /O-D /TC > "%TEMP%\dirlist.tmp" 
< "%TEMP%\dirlist.tmp" SET /P last_dir= 

FOR /D %%I IN ("%tgt_path%\*") DO RD "%%I" /S /Q 
DEL "%tgt_path%\*" /Q 

XCOPY "%src_root%\%last_dir%\*" "%tgt_path%" /S /E 

src_root變量應該包含的路徑到你的日常文件夾中創建的文件夾,tgt_path是最新的文件夾的內容複製到目標路徑複製。

DIR命令被設置爲返回根文件夾的內容以下述方式:

  • 在輸出沒有額外的信息,只有名稱(/B);

  • 沒有文件,只是文件夾(/AD);

  • 排序(/O…)在文件夾中的日期的降序(…-…)順序(…D)的輸出;

  • 日期是該文件夾的創建日期(/TC)。

輸出被重定向到一個臨時文件,其第一行然後被讀入變量(SET /P命令)。這條信息連同根路徑和目標路徑最終首先用於刪除,然後是複製文件。

刪除分兩步完成:首先是文件夾(在FOR /D循環中的RD命令),然後是文件(DEL)。我想在這一點上指出,這個腳本不會在你身邊的任何階段進行干預,我理解你的意圖。因此,它不希望確認刪除目標路徑上的文件和文件夾,因此,當您運行腳本時,舊內容將被無聲刪除(這是與RD一起使用的/Q開關的作用和DEL)。

複製使用XCOPY完成,因爲它允許我們保留源文件夾(/S開關)的結構,包括空子目錄(/E)(如果有的話)。

您可以通過在命令提示符下使用/?開關調用其中的任何命令,獲得有關此處提及的每個命令的更多信息。

+0

非常出色,非常感謝你和謝謝你解釋每一步! – evoman91 2012-01-08 21:48:15

+0

精彩的小劇本,謝謝Andriy!我在幾個月前寫了類似於bash的東西,但卻懶得想,所以在SO和「voila」上查看它。小警告:該腳本將默默刪除目標目錄中的所有內容。所以要小心將它指向一個新的空文件夾。 – 2013-01-18 01:34:06

+0

@AlexPakka:非常感謝您的評價,我很高興您認爲這有用。你是完全正確的,這個腳本確實會把所有東西都悄悄地刪除。我明白這會同意OP的要求,因爲他們明確表示他們希望覆蓋目標的內容。但是,現在你已經明確提到,我認爲在我的文章中指出它也是一個好主意(並且我馬上就這樣做),所以也要感謝! – 2013-01-18 07:12:34