如何从一个batch file中启动进程的PID?

Windows批处理脚本中,有start命令启动一个新的进程。

是否有可能获得刚开始的进程的PID?

Solutions Collecting From Web of "如何从一个batch file中启动进程的PID?"

你可以批量,但不能直接说。 您需要解析tasklist.exe的输出或使用wmic.exe。 这两个要求你知道你刚刚开始什么,当然你会。

使用tasklist.exe:

 for /F "TOKENS=1,2,*" %a in ('tasklist /FI "IMAGENAME eq powershell.exe"') do set MyPID=%b echo %MyPID% 

要在批处理脚本中使用这个,请将百分号加倍。

使用wmic.exe:

 for /f "TOKENS=1" %a in ('wmic PROCESS where "Name='powershell.exe'" get ProcessID ^| findstr [0-9]') do set MyPID=%a echo %MyPID% 

如果已经有相同名称的进程正在运行,则首先需要获取当前pid的列表,然后再启动本地进程,然后再次检查pid。 这里是一个示例代码,开始3进程并杀死它们(特别是在本地启动的):

 @echo off set PROCESSNAME=notepad.exe ::First save current pids with the wanted process name setlocal EnableExtensions EnableDelayedExpansion set "RETPIDS=" set "OLDPIDS=p" for /f "TOKENS=1" %%a in ('wmic PROCESS where "Name='%PROCESSNAME%'" get ProcessID ^| findstr [0-9]') do (set "OLDPIDS=!OLDPIDS!%%ap") ::Spawn new process(es) start %PROCESSNAME% start %PROCESSNAME% start %PROCESSNAME% ::Check and find processes missing in the old pid list for /f "TOKENS=1" %%a in ('wmic PROCESS where "Name='%PROCESSNAME%'" get ProcessID ^| findstr [0-9]') do ( if "!OLDPIDS:p%%ap=zz!"=="%OLDPIDS%" (set "RETPIDS=/PID %%a !RETPIDS!") ) ::Kill the new threads (but no other) taskkill %RETPIDS% /T > NUL 2>&1 endlocal