0

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

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

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

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

或者

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

谢谢你的帮助JB

4

3 回答 3

1

您的示例代码永远不会在任何机器上运行,因为您将变量名称声明为“curPath”并将 vlaue 分配给“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

于 2013-04-25T18:54:22.380 回答
0

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

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

在此处此处查看类似问题以获取更多信息。

于 2013-04-26T18:58:30.227 回答
-1

您是否尝试过使用 RunAs?

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

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

于 2013-04-25T18:05:10.360 回答