Vbscript 使用Win32_进程启动时,批处理的输出文件保持锁定状态
我正在使用此VBScript在隐藏窗口中启动命令文件: 此外,我将cmd的输出重定向到一个文件,以用于日志记录 我的VBScript基本上是:Vbscript 使用Win32_进程启动时,批处理的输出文件保持锁定状态,vbscript,batch-file,Vbscript,Batch File,我正在使用此VBScript在隐藏窗口中启动命令文件: 此外,我将cmd的输出重定向到一个文件,以用于日志记录 我的VBScript基本上是: Const HIDDEN_WINDOW = 12 strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set
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
命令。你知道为什么会这样吗
编辑:
多亏了巴厘岛C,一个更简短的脚本版本:
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("C:\Temp\test.cmd > C:\Temp\log.txt"), 0, True
但是,问题是相同的。我不确定为什么您的脚本不起作用,但这要短得多,对我来说也很有效
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("C:\Temp\test.cmd >C:\Temp\log.txt"), 0, True
我认为您唯一的选择是重定向批处理的每一行,除了启动记事本的那一行
ECHO whatever>>log.txt
START "" notepad.exe
ECHO blah blah blah>>log.txt
这个脚本要短得多,但是在记事本关闭之前,
log.txt
仍然被锁定。事实上,它太短了,以至于另一个脚本觉得有点可笑。但正如@aphoria所提到的,日志文件被锁定(无法修改或删除),直到记事本关闭。在Windows XP和Windows Server 2008上测试。非常奇怪,但我找不到任何解决方法,抱歉!在记事本关闭之前,我无法删除它。我正在运行Windows 7。是的,我也是,我想我在运行时无意中关闭了记事本,我再试了一次,发现“它正在使用”错误。