作为计划任务运行 Visual Basic 脚本询问我要如何打开文件

Posted

技术标签:

【中文标题】作为计划任务运行 Visual Basic 脚本询问我要如何打开文件【英文标题】:Running Visual Basic Script as a Scheduled Task asks how I want to Open the File 【发布时间】:2014-02-06 05:42:33 【问题描述】:

我在任务计划程序中创建了一个任务,该任务应该执行我编写的 .vbs 文件。问题是每次服务运行时,而不是实际执行代码,我都会被问到我想如何打开文件。我怎样才能阻止这个?请不要建议批处理文件;我不能为此使用它们。

命令行是"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"

错误

【问题讨论】:

您如何尝试在任务计划程序中“执行”.vbs 文件? (你使用的命令行是什么?) @KenWhite 我只是将任务的操作设置为运行脚本。 具体设置了“任务的动作”做什么?当你点击“Action->New”时,它要求你输入“Program/Script”,在你浏览并选择脚本后它会显示什么? @KenWhite 查看编辑。对于不理解该请求,我深表歉意。 感谢您的编辑(和详细信息)。抱歉,这似乎是一个愚蠢的问题,但你为什么不使用 MalwareByte 的内置调度程序?它包括“安排自动扫描”作为其功能的一部分。我将发布带有建议解决方案的答案。 【参考方案1】:

我曾经有过同样的事情。我是从一个 MS 论坛中找到的。

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

【讨论】:

问题说他已经这样做了,但不能正常工作。现在甚至还有一张图片。 我已经完成了所有这些。问题是当任务开始时,而不是实际运行它,它只是询问我想如何打开文件。我正在尝试使用 vbs 文件而不是批处理文件,因为我不希望在任务运行时看到任何控制台。【参考方案2】:

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

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

更改 Program/script 条目,并将 cscript.exe 添加到开头,因此完整条目将显示为(当然都在一行上):

cscript.exe "C:\Program Files (x86)\Malwarebytes' Anti-Malware\Malwarebytes Task Scheduler Instructions\Batch Files\MalwarebytesScanAndUpdate.vbs"

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

"%SystemRoot%\System32\cscript.exe" "C:\Program Files (x86)\Malwarebytes' Anti-Malware\Malwarebytes Task Scheduler Instructions\Batch Files\MalwarebytesScanAndUpdate.vbs"

如果这不起作用,请剪切完整的路径名(同样,包括引号),并将其粘贴到标记为 Add arguments (optional): 的编辑控件中。

您还可以在命令行中将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。 :-)

【讨论】:

使用您给我的条目,我收到一条消息说系统找不到指定的文件。至于您关于将文件路径移动到参数框中的建议,调度程序会自动执行此操作。如果您需要,我将发布整个错误的屏幕截图。 对不起。你复制/粘贴了吗? cscript.exe 之间有一个错误的空格(错字)。我会修复它(以及发布指定它的替代方法)。 不,我复制了上面那个在cscript.exe之间没有多余空格的那个。 :-) 我刚刚更正了它,所以如果你看到它没有空格,你就会看到更正。在任务计划程序中再次检查该条目。我还添加了一个包含完整路径的替代方法(其中包含 %SystemRoot% 的路径)。 根据您包含的命令提示符捕获,您缺少脚本文件路径周围的双引号。在“任务计划程序”对话框中非常仔细地检查脚本的路径和文件名。如果 Windows 找不到它,则说明您遗漏了一些东西。【参考方案3】:

您说系统提示您如何打开(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。解决此问题的三种方法:

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

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

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

    在 VBScript 中指定批处理文件的完整路径。

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

    请注意,在这种情况下,您需要在路径两边加上双引号,因为它包含空格!

【讨论】:

感谢您指出我需要添加shell.CurrentDirectory。我以为没有它我会没事,因为批处理文件与脚本位于同一文件夹中,但显然它不能那样工作。【参考方案4】:

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

计划任务设置为运行类似:

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

以上是使用任务计划程序属性对话框的浏览功能选择 .vbs 的结果。

使用“[x] 仅在用户登录时运行”选项手动运行任务会打开“您要如何打开此文件?”,提示选择 Firefox、IE、记事本等其中之一。

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

assoc .vbs 给出: .vbs=VBS文件

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\

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

【讨论】:

史诗,为我工作。感谢您提交此答案。【参考方案5】:

我遇到了类似的问题。

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

我的无法运行,因为bubble.vbs 位于具有长文件名的目录中,而我之前曾使用“JV 16”禁用长文件名以加速我的计算机。

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

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

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

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

【讨论】:

【参考方案6】:

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

我试图安排一个脚本 C:\reminder.vbs 在特定时间运行,并且遇到了同样的问题,我可以通过双击资源管理器来运行它,但当任务运行它询问我想用什么打开它。我通过将预定程序/脚本从 C:\reminder.vbs 更改为 wscript.exe "C:\reminder.vbs"

解决了这个问题

所以它可能并不能真正解释为什么会出现最初的问题,但它确实使脚本正确运行。

【讨论】:

以上是关于作为计划任务运行 Visual Basic 脚本询问我要如何打开文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Basic 脚本和批处理的 Java 作为 Windows 服务

AutoIt 脚本可以在未登录时作为计划任务运行吗?

作为计划任务运行时,Powershell 脚本无法访问文件

辉煌不再!Microsoft计划结束Visual Basic编程语言

Visual Basic 异步任务而不是同步任务

如何在 EMR 中的特定实例组上运行脚本