将Visual Basic脚本作为计划任务运行会询问我打开文件的方式

时间:2014-01-17 02:14:32

标签: windows vbscript scheduled-tasks

我在Task Scheduler中创建了一个任务,该任务应该执行我编写的.vbs文件。问题是,每次服务运行,而不是实际执行代码,我被问到我想如何打开文件。我怎么能阻止这个?请不要建议批处理文件;我无法使用它们。

enter image description here

命令行为"C:\Program Files (x86)\Malwarebytes' Anti-Malware\Malwarebytes Task Scheduler Instructions\Batch Files\MalwarebytesScanAndUpdate.vbs"

vbs文件的代码是......

Dim shell
Set shell = WScript.CreateObject ("WScript.Shell")
shell.Run "MalwarebytesUpdate.bat"
WScript.Sleep 300000 'Sleeps for 5 minutes.
shell.Run "MalwarebytesScan.bat"

错误 enter image description here

6 个答案:

答案 0 :(得分:4)

听起来您已将wscript配置为.vbs文件的默认关联,而不是cscript。您可以使用ftype在命令提示符处进行检查。在我的普通Win7 64位Pro机器上,它产生以下内容(这表明我的配置为wscript.exe):

C:\>ftype VBSFile
VBSFile="%SystemRoot%\System32\WScript.exe" "%1" %*

更改程序/脚本条目,并将cscript.exe添加到开头,这样就可以读取完整条目(当然,所有内容都在一行上):

  

cscript.exe“C:\ Program Files(x86)\ Malwarebytes'Anti-Malware \ Malwarebytes任务计划程序说明\批处理文件\ MalwarebytesScanAndUpdate.vbs”

如果任务计划程序抱怨cscript,请将其更改为

  

“%SystemRoot%\ System32 \ cscript.exe”“C:\ Program Files(x86)\ Malwarebytes'Anti-Malware \ Malwarebytes任务计划程序说明\批处理文件\ MalwarebytesScanAndUpdate.vbs”

如果这不起作用,请剪切完整路径名(再次,包括引号),并将其粘贴到标有添加参数(可选):的编辑控件中。

你也可以在命令行设置cscript作为你的默认脚本处理器(虽然我不鼓励你,除非你确定这是你想做的事情):

C:\>cscript /H:Cscript

请注意,您必须在以管理员身份打开的命令提示符下执行此操作(“开始”,键入“命令”,右键单击“命令提示符”,然后从上下文菜单中选择“以管理员身份运行”),并且从那里执行上面的操作。你会得到类似这样的输出:

C:\Windows\system32>cscript /H:CScript
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

The default script host is now set to "cscript.exe".

如果您决定将其撤消,请重复上述操作并改为使用/H:WScript

C:\Windows\system32>cscript /H:WScript
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

The default script host is now set to "wscript.exe".

他们的文件夹名称中是否包含单引号?这是非常令人讨厌的,IMO。 : - )

答案 1 :(得分:3)

我知道这真的很老了,但我只是遇到了同样的问题,并通过以下方式解决了这个问题,无论是否是“正确的”方式,其他人都可以判断。

我正在尝试安排一个脚本 C:\ reminder.vbs 在特定时间运行并遇到同样的问题我可以通过双击浏览器来运行它而不用担心,但是当任务运行它问我想打开它。我通过将预定的程序/脚本从 C:\ reminder.vbs 更改为 wscript.exe“C:\ reminder.vbs”

来解决了这个问题

所以它可能并没有真正解释为什么最初的问题正在发生,但它确实使脚本正确运行。

答案 2 :(得分:2)

这也发生在一个相当“干净”的Windows Server 2012 R2系统上,除了各种Windows角色和功能外,只安装了Firefox和WinRAR。

计划任务设置为运行如下:

“C:\ Program Files(x86)\ example \ Example \ Sample App \ Directory \ example.vbs”

以上是使用Task Scheduler Properties对话框的Browse功能选择.vbs的结果。

使用“[x]仅在用户登录时运行”选项手动运行任务打开“您想如何打开此文件?”,提示选择Firefox,IE,记事本等。< / p>

请注意,如果没有上述设置,它只会静默显示“操作已被用户取消。(0x800704C7)”上次运行结果。所以我希望寻找此错误的其他人现在可以找到这个帖子并尝试“[x]仅在用户登录时运行”选项,看看他们是否有这个确切的问题。

assoc .vbs给出: .VBS = VBSFile

ftype VBSFile给出: VBSFile =“%SystemRoot%\ System32 \ WScript.exe”“%1”%*

我尝试在“开始时间”选项中设置当前目录,但这也无济于事。

在我的案例中,解决方案不是简单地添加当前目录,而是编辑“浏览”按钮设置的程序/脚本字符串。

此:

“C:\ Program Files(x86)\ example \ Example \ Sample App \ Directory \ example.vbs”

必须成为:

example.vbs

并且“可选的”开始字段必须设置为:

C:\ Program Files(x86)\ example \ Example \ Sample App \ Directory \

其他变体,例如带引号的路径或带路径的程序/脚本无法解析。

答案 3 :(得分:1)

您说您已经提示如何打开(VBScript?)文件,但是您发布的错误消息的屏幕截图显示您的VBScript无法找到它尝试运行的批处理脚本。这是两个不同的问题,彼此无关。

有关如何打开特定文件的提示通常是由于文件扩展名与可执行程序的关联缺失或缺少默认操作引起的。

这可能表示系统中存在恶意软件,因为默认情况下,扩展程序.vbswscript.exe相关联。

您可以使用assocftype来验证关联:

C:\>assoc .vbs
.vbs=VBSFile

C:\>ftype vbsfile
vbsfile="%SystemRoot%\System32\WScript.exe" "%1" %*

或者您可以直接检查相应的注册表设置,如下所示:

HKEY_CLASSES_ROOT
+-.vbs : (Default)  REG_SZ  "VBSFile"
|
`-VBSFile
  `-Shell : (Default)  REG_SZ  "Open"
    `-Open
      `-Command : (Default)  REG_EXPAND_SZ  "%SystemRoot%\System32\WScript.exe" "%1" %*

屏幕截图中的错误消息

  

系统找不到指定的文件。

生成

,因为您的VBScript无法在当前工作目录中找到批处理文件MalwarebytesUpdate.bat。有三种方法可以解决这个问题:

  1. 将计划任务的工作目录(字段开始于(可选):)设置为包含批处理文件的文件夹。

  2. 让您的VBScript将工作目录更改为包含批处理文件的文件夹。

    shell.CurrentDirectory = "C:\Program F...ructions\Batch Files"
    shell.Run "MalwarebytesUpdate.bat"
    
  3. 在VBScript中指定批处理文件的完整路径。

    shell.Run """C:\Program F...ructions\Batch Files\MalwarebytesUpdate.bat"""
    

    请注意,在这种情况下,路径周围需要双引号,因为它包含空格!

答案 4 :(得分:0)

我有类似的问题。

我在任务调度程序中通过bubbles.vbs运行bubbles.scr(气泡屏幕保护程序),因为Windows 8.1不会运行它。

由于bubble.vbs位于一个文件名长的目录中,因为我之前使用的是&#39; JV 16&#39;禁用长文件名以加速我的电脑。

我还将wscript.exe设置为打开.vbs文件的默认程序(类型:ftype vbsfile(在命令提示符下找到默认程序关联)

我必须指定cscript.exe作为要在任务调度程序中运行的程序/脚本,并指定vbs脚本的路径(j:\ bubbles.vbs)作为参数(不带引号)。

我还必须启用长文件名支持或选择8个或更少字符的目录名(j:\ Bubbles Screen Saver \ bubbles.vbs到j:\ bubbles.vbs)。

[当我长时间阅读书籍时,我使用气泡屏幕保护程序来保护我的屏幕,因为你可以在短暂的暂停期间看到气泡 ]

答案 5 :(得分:-1)

我曾经有同样的事情。我在其中一个MS论坛上找到了这个。

VB脚本可以直接从Windows任务计划运行。在任务计划程序中,选择“添加新计划任务”。按照提示操作,浏览以选择.vbs文件。为您的任务命名并选择您的日程表以每天运行任务并选择要运行的时间。它的工作原理与您想要安排.Bat文件的方式相同。 在命令中使用绝对文件路径。 或者从.bat文件中调用vbs文件。 cscript // nologo c:\ test.vbs