Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vbscript 使用Win32_进程启动时,批处理的输出文件保持锁定状态_Vbscript_Batch File - Fatal编程技术网

Vbscript 使用Win32_进程启动时,批处理的输出文件保持锁定状态

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

我正在使用此VBScript在隐藏窗口中启动命令文件:

此外,我将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
命令。你知道为什么会这样吗

编辑:

多亏了巴厘岛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。是的,我也是,我想我在运行时无意中关闭了记事本,我再试了一次,发现“它正在使用”错误。