调用 vbs 的批处理文件不会从任务调度程序运行

Posted

技术标签:

【中文标题】调用 vbs 的批处理文件不会从任务调度程序运行【英文标题】:Batch file calling vbs wont run from Task scheduler 【发布时间】:2015-09-05 12:04:14 【问题描述】:

我在任务计划程序中安排了一个批处理文件。如果我从 CMD 手动运行这个批处理文件,它将完成所有工作,大约需要 20 分钟。但是如果我在任务调度程序中安排它,它会在开始运行时立即完成并显示结果是“成功完成......”(VBS 没有运行......)这个批处理文件将调用 2 个 vbs 脚本来运行。我不确定任务计划程序是否有问题,或者只是批处理文件中的代码错误。

 @echo off

set logfile=c:\temp\Shop_Floor_Schedule.%TIME:~0,2%.log

echo %date% %time% > %logfile%

cscript  "c:\work\scripts\Export.vbs" >> %logfile% 2>&1

cscript  "c:\work\scripts\Schedule.vbs" >> %logfile% 2>&1

echo "batch complete" >> %logfile%

我在日志文件中收到错误消息

Fri 06/19/2015 10:00:00.13 
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

starting Excel
opening workbook
c:\work\scripts\Export.vbs(30, 1) Microsoft Excel: Microsoft Excel cannot access the file 'C:\ntfs3\scripts\PRODUCTION.xls'. There are several possible reasons:

 The file name or path does not exist.
 The file is being used by another program.
 The workbook you are trying to save has the same name as a currently open workbook.

我只从任务调度程序中收到此消息,但如果从 cmd 手动运行它,一切都很好。

【问题讨论】:

您确定 vbscripts 没有实际运行吗?它们可能正在运行,但由于某种原因而失败...例如在计划作业中以不同的用户帐户运行。 是的,我确定 vbs 没有运行。我使用域管理员权限运行它。当我手动运行它时,它将占用 100% 的杯子和 85% 的内存,但如果我从任务调度程序运行它,所有系统资源都处于空闲状态...... 它是否将您的日期和时间以及“批处理完成”消息写入日志文件? vbscript 行中是否有任何内容写入%logfile% 如果您没有获取日志文件,那么问题可能出在计划任务设置中。如果它正在创建日志文件,那么您应该会看到 VB 脚本的输出以及它们输出的任何错误。 【参考方案1】:

改掉使用 wscript.echo 和 stdOut vbscript 输出进行日志记录的习惯...这是一种糟糕的做法,并且会降低您包含解决此类问题的逻辑的能力。

我建议对方法进行修复。而不是使用 >> %log% 2>&1... 为日志文件使用 vbscripts 的参数。这是一个简单的解决方案。只需将您的计划任务指向此 vbscript.. 它应该可以解决此批处理文件问题。

const forreading = 1, forwriting = 2, forappending, 8
set fso = CreateObject("Scripting.FileSystemObject")
set shell = WScript.CreateObject ("WScript.shell")
logfile = "C:\temp\Shop_Floor_Schedule" & Hour(now()) & ".Log"

' Start Export.Vbs
'============================================================    
Call WriteLog("Starting Export VBScript")
Shell.run "cmd /c cscript  c:\work\scripts\Export.vbs >> """ & logfile & """ 2>&1"


' Start Schedule.vbs
'========================================
Call WriteLog("Starting Schedule VBScript")
Shell.run "cmd /c cscript  c:\work\scripts\Schedule.vbs >> """ & logfile & """ 2>&1"

'Terminate Objects and exit script
'============================================================
Call WriteLog("Terminating Script")
Set objShell = Nothing
Set fso = nothing

Sub WriteLog(strMessage)
    set logf = fso.OpenTextFile(logfile, forappending, true)
    strTime = Hour(Now()) & ":" & Minute(Now())
    logf.writeline = Date() & " - " & strTime & "   " & strMessage
    logf.close
    set logf = nothing
end sub

【讨论】:

以上是关于调用 vbs 的批处理文件不会从任务调度程序运行的主要内容,如果未能解决你的问题,请参考以下文章

Windows 2008 服务器任务调度程序不运行 .bat 批处理作业 [关闭]

如何使用 Messagebox 在 Windows 7 任务调度程序中启动 VBS 脚本?

我的脚本不会在任务调度程序下运行。为啥?

批处理手动运行良好。但是当从任务调度程序运行时会出错

bcp 未从任务调度程序运行

任务计划程序 BAT、PS1、VBS,无法运行