.vbs脚本不会运行批处理/如何静默运行批处理

时间:2013-04-25 17:49:28

标签: windows vbscript batch-file windows-server-2008 wsh

我有一个我想静默运行的批处理文件。 所以,我正在四处寻找并提出以下代码...... invMybatchfile.vbs

Dim curPath
curPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
Set WshShell = CreateObject("WScript.Shell")
cmds=WshShell.RUN(sCurPath & "\Mybatchfile.bat", 0, True)

此代码在我的桌面上工作(Window 7 32bit),但由于某种原因,此脚本在服务器计算机(Windows Server 2008 R2)上不起作用。当我单击invMybatchfile.vbs时,dos窗口会立即弹出并关闭,而Mybatchfile.bat根本不会被执行。 (如果我只是在服务器计算机上运行Mybathfile.bat,它运行正常,所以批处理文件不是问题。)

所以我的问题是,有谁知道我为什么遇到这个问题?

OR

有没有其他方法可以静默启动批处理文件(不是最小化,我知道这种方式),而不使用.vbs文件或安装其他软件?

感谢您的帮助 JB

3 个答案:

答案 0 :(得分:1)

您的示例的代码永远不会在任何计算机上运行,​​因为您将变量名称声明为“curPath”并将该值分配给“CurPath”但您尝试使用名称为“sCurPath”(并且该变量)在您的代码中不存在。)

此外,您不需要设置当前工作目录,因为当您启动文件时,shell会在工作目录中搜索该文件,因此这只是您需要的所有代码,只需一行:

CreateObject("WScript.Shell").RUN "Mybatchfile.bat", 0, True

但如果您有兴趣存储或使用当前工作目录的任何奇怪的原因,您有一个返回当前目录的方法:

.CurrentDirectory

然后你可以这样使用这个方法:

Set Shell = CreateObject("WScript.Shell")
Shell.RUN Shell.CurrentDirectory & "\Mybatchfile.bat", 0, True

...或以这种方式将当前目录存储在var中:

Set Shell  = CreateObject("WScript.Shell")
CurDir = Shell.CurrentDirectory & "\"
Shell.RUN CurDir & "Mybatchfile.bat", 0, True

MSDN http://msdn.microsoft.com/en-us/library/3cc5edzd%28v=vs.84%29.aspx

修改

关于运行静音文件,您也可以使用 NirCMD 命令行应用程序来执行此操作。

NirCMD exec hide "Path to Batch File\Batch File.bat"

官方网站http://www.nirsoft.net/utils/nircmd2.html

答案 1 :(得分:0)

我认为您需要通过cmd.exe运行它:

WshShell.Run("%COMSPEC% /c " & CurPath & "\Mybatchfile.bat", 0, True)

检查类似问题herehere以获取更多信息。

答案 2 :(得分:-1)

您是否尝试过使用RunAs?

    cmds=WshShell.RUN("runas /noprofile /user:mymachine\administrator " _
    & sCurPath & "\Mybatchfile.bat", 0, True)

由于它适用于Windows 7但不适用于Server 2008 R2,因此对我来说这听起来像是权限问题。