从任务计划程序启动时,无法在批处理文件中调用子例程

时间:2017-06-13 08:15:17

标签: batch-file if-statement scheduled-tasks

我编写了一个简单的批处理文件脚本,用于每天,每周和每月备份测试数据。

如果直接运行批处理文件,脚本运行良好,但是从Windows任务计划程序(Windows 10)启动时遇到问题。

我有一个批处理文件写入的日志文件,所以我知道脚本会执行。但问题似乎是在使用if语句和调用子例程时。

主要代码如下:

:: call daily backup every day    
call :dailybackup

:: call weekly backup if today is sunday
if %day%==Sun ( call :weeklybackup )

:: call monthly backup if today is the 28th
if %dd%==28 ( call :monthlybackup )

call :log "FINISHED"

:: main program complete - exit batch file
exit /b

每个子例程将日志消息写入日志文件。我已经验证了:dailybackup和:每月备份例程在我手动运行批处理文件时被正确调用,但是从Task Scheduler运行时则不行。 :dailybackup例程始终执行。

只需澄清一点,我知道当我收到"完成"批处理文件时,批处理文件会完全退出。记录消息。

任何想法都很受欢迎

ps我刚刚被问到如何计算%day%和%dd%.....

:: Get the current day of the month
for /f "tokens=1-3 delims=/ " %%a in ("%date%") do (
    set dd=%%a
    set mm=%%b
    set yy=%%c
)

:: determine the day of the week
for /f "skip=1" %%a in ('WMIC Path Win32_LocalTime Get DayOfWeek' ) do (
    if %%a==1 set day=Mon
    if %%a==2 set day=Tue
    if %%a==3 set day=Wed
    if %%a==4 set day=Thu
    if %%a==5 set day=Fri
    if %%a==6 set day=Sat
    if %%a==7 set day=Sun
)

0 个答案:

没有答案