【问题标题】:Scheduled batch file backup计划的批处理文件备份
【发布时间】:2013-02-25 17:34:41
【问题描述】:

我一直在写这个备份脚本。该脚本的目标是:

  1. 唤醒局域网上的睡眠 PC

  2. 运行 Microsofts Synctoy(cmd 版本)以同步我设置的所有配对文件夹并将结果输出到日志文件。

  3. 如果出现错误,应将其写入日志文件,然后通过 mailsend.exe 向我发送电子邮件。

批处理文件设置为每晚运行 Windows 7 的计划任务。

批处理文件的内容:

    @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 example.email@googlemail.com -from example.email@gmail.com -ssl -attach synctoy_error_log.txt,text/plain,i -smtp smtp.googlemail.com -port 465 -sub SyncToy_log +cc +bc -v -auth-login -user example.email@gmail.com -pass examplepass
    GOTO END

    :END
    EXIT

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.

如您所见,有几天没有写入日志。正在运行计划任务的 PC 和我要唤醒的 PC,此时应该已经可以访问了。

在我的错误检查中我做错了什么吗?

我也没有收到一封电子邮件说有问题,但是如果我断开睡眠中的 PC 与 LAN 的连接并强制脚本启动,我会收到一封电子邮件说它无法唤醒它。

感谢您给我的任何建议,非常感谢。我知道这不是最有效的脚本,但我一直在尝试尽可能多地完成。

【问题讨论】:

  • 可能是权限问题,定时任务无法发送邮件。您是否尝试过编写一个更简单的批处理文件来发送电子邮件,并让它按计划运行,以确保该部分正常工作?您也可以尝试让批处理文件在每次运行时都写入自己的日志,这样您至少可以确认它在那些日子里正在运行(甚至可能会在日志中吐出一些调试消息,这样您就可以看到它有多远得到)。还要查看您的事件日志以查看任务计划程序是否报告了任何错误。
  • 感谢您的建议,我会继续尝试。
  • 我制作了一个新的简化批处理文件,其中仅包含“mailsend.exe”行,当通过计划任务激活时它可以正常工作。我还添加了一个新的日志文件来从批处理文件本身中捕获调试数据。我只需要等待,看看它是否在未写入日志的日子被激活。
  • 另外我检查了事件日志,没有与任何问题一致的日志。

标签: if-statement batch-file error-handling scheduled-tasks wake-on-lan


【解决方案1】:

脚本在什么帐户下作为计划任务运行?通常nt帐户系统无法使用任何网络共享,请尝试在允许在secpol中作为批处理任务登录的用户帐户下运行。

【讨论】:

  • 它在管理员帐户下运行。
  • 单击开始类型 secpol.msc 并启动它 - 在 MSC 管理单元中选择“本地策略” - 选择“用户权限分配” - 右键单击​​“作为批处理作业登录”并选择属性 - 单击“添加用户或组”,并包含相关用户。
  • @rikki-b 你甚至没有尝试,那个东西后面只有一个项目,你可以直接在你的脚本中映射驱动器,这样做你需要先删除网络使用和然后将其重新映射为脚本的帐户/网络资源不能使用同一帐户映射两次)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多