我正在使用此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
然而,问题是一样的。
答案 0 :(得分:0)
我不确定为什么你的脚本不起作用,但这个更短,适合我
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("C:\Temp\test.cmd >C:\Temp\log.txt"), 0, True
答案 1 :(得分:0)
我认为你唯一的选择是重定向批次的每一行,除了启动记事本的行。
ECHO whatever>>log.txt
START "" notepad.exe
ECHO blah blah blah>>log.txt