2012-07-10 48 views
1

我無法弄清楚如何編寫腳本,該腳本僅在前一天創建或修改後端文件。因此,如果我在15點15分15:30開始腳本,它將在24.07 00:00和25.07 00:00之間備份文件。 如果可能,優先方式是使用robocopy。我知道/ maxage -1開關,但它適用於從時間腳本開始算起1天的文件(問題是因爲它包含當前日期的文件)。用於備份的windows批處理腳本

set source="C:\Folder1" 
set destination="F:\Folder2" 
robocopy %source% %destination% /z /MAXAGE: -1 
+0

不意思是SO。但爲什麼你不使用一些備份工具http://www.idrive.com/?uid=O2V7U0H4B4 – 2012-07-10 12:01:52

+0

@GauravShah,爲什麼它不適合SO? @@ ValentQ,請張貼您的原始腳本,以便能夠使用。 – 2012-07-10 12:20:32

+0

如果你看到未經編輯的問題,它沒有顯示任何代碼,所以我認爲他只是想自動備份...... – 2012-07-11 03:57:20

回答

0

的Robocopy給你指定的日期(用於最大生存週期,MINAGE,MAXLAD,MINLAD)兩個選項 - 無論是相對(正< 1900)或固定日期(否則,視爲YYYYMMDD)。 Full syntax here
您希望包含在給定日期創建或訪問的文件,因此您必須使用最小/最大lad(上次訪問日期)和固定日期,因此讓我們使用robocopy語法指定您的條件:
1.排除自昨日起未使用的文件:使用/ MAXLAD(today_date - 1天)
2.排除文件使用的今天:使用/ MINLAD(today_date)
把那些一起:
robocopy source_dir destination_dir file_spec /maxlad:%today_minus_1% /minlad:%today%

todaytoday_minus_1瓦爾必須爲YYYYMMDD格式的日期(eg.20120710 ) - 如何獲得它們?那麼,如果你受限於純批次,你將不得不找到腳本來爲你做數學,有一些可用的(例如。here)或自己寫。

如果你可以使用PowerShell這是很簡單的:
for /f %y in ('powershell get-date ^(get-date^).adddays^(-1^) -uformat %Y%m%d') do set today_minus_1=%y首先讓你和 秒變量。

所以總結一下:設置你的日期變量,然後運行robocopy(在排除中使用它們)。當檢查它是否正常工作時,使用/L選項是值得的,因爲實際副本將重新設置文件上的訪問時間戳!

所有變量和命令都是直接從cmd行執行的。如果在批量使用,您將需要添加一些%(和可能是明智的使用SETLOCAL)

注:版本我用(XP010)不允許使用負數或空間,在你的榜樣