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

时间:2016-11-01 05:24:44

标签: batch-file

我正在尝试运行程序并获取其PID,以便在程序执行期间挂起时我可以终止该程序。我无法用程序名杀死程序,因为PC上会运行多个程序。 我遇到了论坛并得到了wmic使用的建议,但我无法通过使用wmic调用它获得程序的输出。

这与本文中提到的问题大致相同: Remote Netstat to STDOUT with WMIC?

我按照建议尝试执行程序并输出:

   wmic process call create "cmd /C > C:\temp\test.txt 2>&1 netstat.exe -ano" 

使用此命令,我能够检索程序的输出,但实际上该程序是从另一个cmd调用的吗?这违背了我最初尝试使用wmic的原始目的。

任何人都可以告诉我是否有其他方法可以获得输出或其他方式从批处理调用程序,获取其PID和程序的输出重定向?

2 个答案:

答案 0 :(得分:0)

此问题的一个示例: How to capture the PID of a process when launching it in DOS ?

@echo off
rem there is a tab in the file at the end of the line below
set tab=    
set "cmd=cmd /k ^> C:\temp\test.txt 2^>^&1 netstat.exe -ano"
set dir=%~dp0

echo Starting MyProg
set pid=notfound

for /F "usebackq tokens=1,2 delims=;=%tab% " %%i in (
    `wmic process call create "%cmd%"^, "%dir%"`
) do (
    if %%j gtr 0 (
        set "pid=%%j"
    )
)
Call :Trim "%pid%"
echo MyPID = "%pid%"
echo Hit any key to kill the process created by WMIC 
pause>nul
Taskkill /F /PID %pid%
pause & exit
::*************************************************************************************
:Trim <String>
set "vbsfile=%tmp%\%~n0.vbs"
(
    echo Wscript.echo Trim("%~1"^)
)>"%vbsfile%"
for /f "delims=" %%a in ('Cscript /nologo "%vbsfile%"') do ( set "pid=%%a" )
If Exist "%vbsfile%" Del "%vbsfile%"
exit /b
::*************************************************************************************

答案 1 :(得分:0)

因为您只需要PID来终止进程,所以您也可以使用windowtitle:

Is acquired

您还可以将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切换为不显示该框。