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

相关问题