Batch file 使用WMIC启动程序并获取其输出

Batch file 使用WMIC启动程序并获取其输出,batch-file,Batch File,我正在尝试运行一个程序并获取它的PID,这样,如果程序在执行过程中挂起,我就可以终止它。我无法终止程序名为的程序,因为电脑上将运行多个程序。 我遇到论坛,得到了使用wmic的建议,但我无法通过调用wmic获得程序的输出 这与本文中提到的问题是一样的: 我按照建议尝试了此命令以执行程序和输出: wmic process call create "cmd /C > C:\temp\test.txt 2>&1 netstat.exe -ano" 通过这个命令,我可以检索

我正在尝试运行一个程序并获取它的PID,这样,如果程序在执行过程中挂起,我就可以终止它。我无法终止程序名为的程序,因为电脑上将运行多个程序。 我遇到论坛,得到了使用wmic的建议,但我无法通过调用wmic获得程序的输出

这与本文中提到的问题是一样的:

我按照建议尝试了此命令以执行程序和输出:

   wmic process call create "cmd /C > C:\temp\test.txt 2>&1 netstat.exe -ano" 
通过这个命令,我可以检索程序的输出,但是程序实际上是从另一个cmd调用的?这违背了我最初尝试使用wmic的初衷


任何人都知道我是否有其他方法来获取输出,或者从批处理中调用程序,获取其PID和调用的程序的输出重定向

这是这个问题的一个例子:

@echo关闭
rem文件中的下一行末尾有一个选项卡
设置选项卡=
设置“cmd=cmd/k^>C:\temp\test.txt 2^>^&1 netstat.exe-ano”
set dir=%~dp0
echo启动MyProg
设置pid=notfound
对于/F“usebackq令牌=1,2 delims=;=%tab%”中的%%i(
`wmic进程调用创建“%cmd%”^“%dir%”`
)做(
如果%%j gtr 0(
设置“pid=%%j”
)
)
调用:修剪“%pid%”
echo MyPID=“%pid%”
echo按任意键终止WMIC创建的进程
暂停>nul
Taskkill/F/PID%PID%
暂停和退出
::*************************************************************************************
:修剪
设置“vbsfile=%tmp%\%~n0.vbs”
(
echo Wscript.echo修剪(“%1”^)
)>%vbsfile%
对于/f“delims=“%%a in('Cscript/nologo”%vbsfile%”)do(设置“pid=%%a”)
如果存在“%vbsfile%”删除“%vbsfile%”
退出/b
::*************************************************************************************

由于您只需要PID来终止进程,因此也可以使用windowtitle:

start "UniqueWindowTitle" cmd /c "ping /t google.de >out.txt 2>&1"
timeout /t 10
taskkill /fi "WINDOWTITLE eq UniqueWindowTitle" 2>nul
type out.txt

您也可以将
/min
添加为
开始
开关,以不显示该框。

嗨,Hackoo,谢谢您的回复。这看起来不像我需要的。也许我给出了一个我想要运行的程序的太简单的例子。该程序类似于putty.exe(不完全是putty,但行为相同),其中cmd在新窗口上调用intent程序,而不是在cmd本身中执行。使用上面给出的脚本,这里显示的PID“echo MyPID=“%PID%”是cmd的PID,而不是程序的PID。当wmic关闭PID时,它只是关闭cmd窗口,而不是程序。希望这次我解释得足够清楚。谢谢!!这看起来是我现在真正需要的。将uniqueWindowTitle分配给程序,然后将其杀死。谢谢!!:)英雄联盟实际上,这两个脚本看起来都没有问题。只有taskkill的/F选项会导致所有问题。cmd或wmic中调用的子程序在没有“/F”的情况下成功终止。或者使用“/F/T”也可以。谢谢大家!:)是的,简单的
taskkill
(没有
/f
)类似于“请停止好吗?”,但是
/f
告诉
taskkill
使用它的枪,在没有警告的情况下击落进程。
wmic进程调用Create…
输出相关的
ProcessId
,因此,您可以稍后通过另一个
wmic
命令行使用它,使用
Where ProcessId=…
,比如
wmic Process Where ProcessId=。。。调用Terminate
,或通过
taskkill/PID…
。。。