2017-02-17 41 views
0

我需要從用戶到我的NAS服務器每隔2次/月在第一天覆制outlook數據& 14,並在用戶登錄到Windows時複製文件。在當前日期和修改日期複製數據庫的批處理腳本?

從源複製到NAS服務器。

這是我的想法!

If (current date = 1 or 14) & (date modified at Source <> date modified at Des) 
{ 
do your_batch_file.bat 
} 
else 
    exit 

有人能幫助我嗎?非常感謝!

+0

outlook數據在哪裏?在客戶端電腦上?你需要將它們發送到服務器呢?或者他們在你的服務器,只需要複製? – reza

+0

它在客戶端計算機中。我需要在給定的日期自動複製文件。 –

+0

您如何知道客戶端計算機將開機?如果計算機在這些日期不可用,會發生什麼情況? – lit

回答

0
wmic os get localdatetime | > nul findstr /b /r /c:"......01" /c:"......14" && (
    robocopy "c:\somewhere" "x:\saveddata" *.pst 
) 
  • wmic用於檢索本地日期/時間
  • findstr有兩個正則表達式來確定一天爲0114
  • 如果findstr找到搜索字符串,它會清除errorlevel和條件運算符&&(如果前一條未失敗,則執行下一條命令)將執行robocopy
  • robocopy將從源複製更新的文件(默認情況下它僅複製更改的文件)到目標

但可能是最好的選擇就是宣佈計劃任務來處理日期選擇並開始複製操作。

編輯適應產生一個標誌文件的註釋

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    rem Check if today we need to do a backup 
    wmic os get localdatetime | > nul findstr /b /r /c:"......01" /c:"......14" && (

     rem Check if we have already done the backup 
     robocopy "%temp%." "%temp%." flagFile /is /maxage:1 >nul 2>nul && (

      rem Execute the backup 
      robocopy "c:\somewhere" "x:\saveddata" *.pst 

      rem And mark the backup as done 
      >"%temp%\flagFile" type nul 
     ) 
    ) 

(在此示例中在temp文件夾)。要確定是否標誌文件丟失,這是一個古老的文件或它今天已經產生,robocopy /maxage:1用於:

  • 如果文件不存在,它不能被複制和errorlevel是0
  • 如果該文件存在,但它是一箇舊文件/maxage:1將其從副本中排除,並且errorlevel爲0
  • 如果文件存在但現在已生成,/maxage:1不會排除它,但會將其選作複製源和目標是相同的,它將被跳過並且errorlevel將會是1

因此,條件執行運算符&&(如果前一個沒有失敗,則執行下一個命令)將啓動備份和創建標誌文件。

+0

謝謝你的支持!但我只需要複製在第一次用戶登錄。因爲如果用戶再次登錄並更改了文件,批處理文件將再次運行。 –

+0

@HuyTortoises,回答已更新。 –

+1

非常感謝您,但是您錯過了/更新後的代碼,否則robocopy將每天執行! –

相關問題