2

我正在使用此 VBScript 在隐藏窗口中启动命令文件:http: //gallery.technet.microsoft.com/scriptcenter/8bbed56f-a7aa-491f-a296-687dd96098a3

此外,我将 cmd 的输出重定向到一个文件,以进行日志记录。

我的 VBScript 基本上是:

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("C:\Temp\test.cmd > C:\Temp\log.txt", null, objConfig, intProcessID)

命令文件安装程序然后启动它。例如,假设它只显示一条消息然后启动记事本:

echo whatever

start "" notepad.exe

启动 VBScript(使用 wscript 或双击它)时,命令文件在隐藏窗口中执行,输出存储在 log.txt 中,并启动记事本。正如预期的那样。

问题是 log.txt 文件在记事本关闭之前一直处于锁定状态(无法删除或修改它)。由于我正在使用命令,因此命令文件不应等待记事本进程退出start。你知道为什么会这样吗?

编辑:

感谢 Bali C,脚本的一个更短的版本:

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("C:\Temp\test.cmd > C:\Temp\log.txt"), 0, True

但是,问题是一样的。

4

2 回答 2

0

我认为您唯一的选择是重定向批处理的每一行,但启动记事本的行除外。

ECHO whatever>>log.txt

START "" notepad.exe

ECHO blah blah blah>>log.txt
于 2013-01-08T17:31:01.637 回答
0

我不确定为什么您的脚本不起作用,但这要短得多并且对我有用

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("C:\Temp\test.cmd >C:\Temp\log.txt"), 0, True
于 2013-01-08T15:46:57.543 回答