2

我一直在使用我一直在寫的備份腳本。腳本的目標是:計劃的批處理文件備份

  1. 我的局域網上喚醒沉睡PC

  2. 運行微軟的SyncToy(CMD版本)同步所有我所建立,並輸出結果配對的文件夾記錄文件。

  3. 如果出現錯誤,應將其寫入日誌文件,然後通過mailsend.exe向我發送電子郵件。

批處理文件設置爲每天晚上運行Windows 7的計劃任務。

批處理文件的內容:synctoy_error_log.txt

18/02/2013 - 6:02:16.40 - Success: Sync completed. 
    20/02/2013 - 6:05:25.71 - Success: Sync completed. 
    21/02/2013 - 6:07:14.27 - Success: Sync completed. 
    22/02/2013 - 6:02:56.34 - Success: Sync completed. 
    24/02/2013 - 6:01:49.97 - Success: Sync completed. 
    25/02/2013 - 6:01:35.14 - Success: Sync completed. 

正如你可以看到有已經幾天在日誌未寫入的

@ECHO OFF 
    SET /a RETRY=0 
    SET /a RETRIES=5 
    SET MAC=000c76****** 
    SET IP=192.168.0.8 
    SET SUBNET=255.255.255.0 
    SET PORT=7 

    ECHO %date% - %time% - Started sync. 

    :CHECK 
    PING -n 1 %IP% | find "bytes=">NUL 
    IF %ERRORLEVEL%==0 (
    GOTO SYNC 
    ) 
    IF %ERRORLEVEL%==1 (
    GOTO WAKE 
    ) 

    :WAKE 
    SET /a RETRY=%RETRY%+1 
    IF %RETRY% GEQ 6 (
    SET ERR_VAL=RETRY 
    GOTO ERROR 
    ) 
    ECHO Waking up \\NAS Attempt %RETRY%\5... 
    START C:\sync\wolcmd.exe %MAC% %IP% %SUBNET% %PORT% 
    timeout /T 30 /NOBREAK>NUL 
    GOTO CHECK 

    :SYNC 
    ECHO SyncToy is running... 
    "C:\Program Files\SyncToy 2.1\SyncToyCmd.exe" -R>C:\sync\synctoy_log.txt 
    IF %ERRORLEVEL% == 0 (
    ECHO %date% - %time% - Success: Sync completed.>>C:\sync\synctoy_error_log.txt 
    GOTO END 
    ) ELSE (
    SET ERR_LEV=%ERRORLEVEL% 
    SET ERR_VAL=SYNC 
    GOTO ERROR 
    ) 

    :ERROR 
    IF %ERR_VAL%==RETRY (
    ECHO Error: Failed to sync, retries exceeded. 
    ECHO %date% - %time% - Error: Failed to sync, retries exceeded.>>C:\sync\synctoy_error_log.txt 
    ) 
    IF %ERR_VAL%==SYNC (
    ECHO Error: SyncToy error (%ERR_LEV%). 
    ECHO %date% - %time% - Error: SyncToy error (%ERR_LEV%).>>C:\sync\synctoy_error_log.txt 
    ) 
    START C:\sync\mailsend.exe -to [email protected] -from [email protected] -ssl -attach synctoy_error_log.txt,text/plain,i -smtp smtp.googlemail.com -port 465 -sub SyncToy_log +cc +bc -v -auth-login -user [email protected] -pass examplepass 
    GOTO END 

    :END 
    EXIT 

內容。計劃任務正在運行的個人電腦和我想要喚醒的個人電腦此時應該可以訪問。

有沒有什麼,我在做錯誤在這裏在我的錯誤檢查或什麼?

我沒有收到一封電子郵件說有問題,但是如果我從局域網斷開睡眠的PC並強制腳本啓動,我收到一封電子郵件說它無法喚醒它。

感謝您的任何建議,你可以給我很大appriciated。我知道這不是最有效的腳本,但我一直在努力挑選一切可以解決的問題。

+2

這可能是一個權限問題,計劃任務無法發送電子郵件。你是否試過編寫一個簡單的批處理文件,只發送電子郵件,讓它按計劃運行,以確保該部分工作?您也可以嘗試讓批處理文件在每次運行時寫入其自己的日誌,這樣至少可以確認它是在那些日子裏運行的(甚至可能會向日志中吐出一些調試消息,以便看到它有多遠獲得)。也看看你的事件日誌,看看任務調度器是否報告了任何錯誤。 – 2013-02-25 17:49:54

+0

感謝您的寶貴意見,我會繼續嘗試。 – 2013-02-25 18:33:50

+0

我使用「mailsend.exe」這一行創建了一個新的簡化批處理文件,它在通過計劃任務激活時正確工作。 我還添加了一個新的日誌文件來捕獲批處理文件本身內的調試數據。 我只需等待,看它是否在日誌未寫入的日期被激活。 – 2013-02-26 00:58:21

回答

0

在什麼帳戶下腳本按計劃任務運行?通常nt帳戶系統無法使用任何網絡共享,請嘗試在允許作爲secpol中的批處理任務登錄的用戶帳戶下運行。

+0

它以管理員帳戶運行。 – 2013-03-24 04:57:20

+1

單擊啓動類型secpol.msc並啓動它 - 在MSC中選擇「本地策略」管理單元 - 選擇「用戶權限分配」 - 右鍵單擊​​「作爲批處理作業登錄」並選擇屬性 - 單擊「添加用戶或組」,幷包括相關用戶。 – peet 2013-03-25 05:03:19

+0

@ rikki-b你嘗試過嗎? – peet 2013-03-27 16:45:47