schtasks命令在从CMD运行时有效,但不从VBScript运行

时间:2016-08-01 21:18:04

标签: windows vbscript cmd

我在VBScript中有以下代码:

Set oShell = CreateObject ("WScript.Shell") 
Dim strArgs

strArgs = "SchTasks /Create /SC MONTHLY /D 8 /TN ""RespaldoBD"" /TR "'C:\Python27\pythonw.exe  %USERPROFILE%\Desktop\RespaldosBD.py'" /ST 16:33"
oShell.Run strArgs, 0, false

这将在Windows中的任务计划程序中创建一个任务。

运行VBScript时,没有创建任务,但是当我在CMD中运行命令时,它可以工作:

SchTasks /Create /SC MONTHLY /D 8 /TN ""RespaldoBD"" /TR "'C:\Python27\pythonw.exe  %USERPROFILE%\Desktop\RespaldosBD.py'" /ST 16:33

我不明白发生了什么。

1 个答案:

答案 0 :(得分:2)

VBScript字符串以双引号开头和结尾。字符串必须内的任何嵌套双引号都可以通过加倍来转义。

您可以像这样定义strArgs

strArgs = "SchTasks /Create ... /TR "'C:\Python27\pythonw.exe  %USERPROFILE%\Desktop\RespaldosBD.py'" /ST 16:33"
'         ^                         ^^
'         |                         |`- comment begins here
' string begins here         string ends here

基本上你运行命令

SchTasks /Create /SC MONTHLY /D 8 /TN "RespaldoBD" /TR 

当然,这是失败的。

通常,您会收到语法错误,但是您在嵌套命令周围使用的单引号会将该行的其余部分转换为注释,因此该语句在语法上是正确的,但在语义上是破坏的。

此外,单引号不应该在那里。他们将整个Python命令行定义为程序时应该只是Python可执行文件。脚本的路径应该是一个参数。

改变这个:

strArgs = "SchTasks /Create /SC MONTHLY /D 8 /TN ""RespaldoBD"" /TR "'C:\Python27\pythonw.exe  %USERPROFILE%\Desktop\RespaldosBD.py'" /ST 16:33"

进入这个:

strArgs = "SchTasks /Create /SC MONTHLY /D 8 /TN ""RespaldoBD"" /TR ""C:\Python27\pythonw.exe %USERPROFILE%\Desktop\RespaldosBD.py"" /ST 16:33"

并且VBScript和计划任务都可以正常工作。