如何在不打开额外命令提示符的情况下从批处理文件中调用VbScript

4
我有一个VBScript文件,我正在尝试从批处理文件中调用它。我将以下代码复制到记事本中并保存为MyScript.vbs。
(http://gallery.technet.microsoft.com/scriptcenter/8bbed56f-a7aa-491f-a296-687dd96098a3#content)
    Const HIDDEN_WINDOW = 12 

    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:" _ 
               & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
    Set objStartup = objWMIService.Get("Win32_ProcessStartup") 

    Set objConfig = objStartup.SpawnInstance_ 
    objConfig.ShowWindow = HIDDEN_WINDOW 
    Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process") 
    errReturn = objProcess.Create("Notepad.exe", null, objConfig, intProcessID) 

创建一个名为Run.bat的批处理文件,并在其中添加以下代码。
    @echo off

    start "C:\\Users\\guest\\Desktop\\123\\MyScript.vbs"

当我试图通过命令提示符执行批处理文件时,会打开另一个命令提示符窗口。
2个回答

11
rem This is the command line version
cscript "C:\Users\guest\Desktop\123\MyScript.vbs"

或者

rem This is the windowed version
wscript "C:\Users\guest\Desktop\123\MyScript.vbs"

你还可以添加选项//e:vbscript,以确保脚本引擎将您的脚本识别为VBScript。

Windows/DOS批处理文件不需要像*nix一样转义\

您仍然可以使用"C:\Users\guest\Desktop\123\MyScript.vbs",但这需要用户将*.vbs关联到wscript


当我在Win 764位系统中执行MyScript.vbs时,我遇到了输入错误:没有适用于文件扩展名“.vbs”的脚本引擎。 - JChan
@JChan 我看到了这篇帖子,或许可以帮到你。我现在没有任何Windows 7机器可以测试,只有XP。 - Alvin Wong
好的,谢谢。它在Win XP上运行正常。我会尝试你的Win7 64位解决方案。 - JChan
@JChan - 这很奇怪(没有 .vbs 的引擎)。你是否尝试通过 //e:vbscript 选项明确指定引擎? - dbenham
@Alvin,无法确保最终用户的计算机上已将.vbs关联到wscript。你的解决方案是正确的,但由于文件关联,我无法实施该解决方案。 - JChan
显示剩余3条评论

0
如果您想修复vbs关联,请输入以下命令:
regsvr32 vbscript.dll
regsvr32 jscript.dll
regsvr32 wshext.dll
regsvr32 wshom.ocx
regsvr32 wshcon.dll
regsvr32 scrrun.dll

如果由于管理原因无法使用vbs,则可以将脚本转换为vb.net程序,这是设计成易于使用的,并且只需5分钟即可完成。

最大的区别在于函数和子程序都使用括号调用,而不仅仅是函数。

因此,所有安装了.NET的计算机上都安装了编译器。

请参阅此处的文章,了解如何制作.NET exe。请注意,示例适用于脚本宿主。您不能使用此功能,必须将vbs代码放入.NET代码中。

如何将VBScript转换为可执行文件(EXE)?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接