2017-09-12 124 views
0

在批处理文件,我可以通过启动程序,并获取进程ID

start "" notepad.exe 

开始并行程序当前会话,但我需要得到我已经开始的进程的句柄。我怎么才能得到它?

+0

什么是处理?这就像一个PID? – SomethingDark

+0

@SomethingDark,是的,进程ID。 – Qwertiy

回答

2
@echo off 

:: set your own command here 
set "command=notepad" 
set "workdir=." 

set "ReturnValue=" 
set "ProcessId=" 
for /f " skip=5 eol=} tokens=* delims=" %%a in ('wmic process call create "%command%"^,"%workdir%"') do (
    for /f "tokens=1,3 delims=; " %%c in ("%%a") do (
     set "%%c=%%d" 
    ) 
) 



if not %ReturnValue%==0 (
    echo some kind of error - error code %ReturnValue% 
) else if defined ProcessId echo PID -^> %ProcessId% 

delims在这一行for /f "tokens=1,3 delims=; "应该是for /f "tokens=1,3 delims=;<tab><space>",我不,如果标签将正确copied.You还需要检查,如果你的编辑器spaces.Check替换选项卡还this

+0

太棒了!不幸的是没有得到它的工作,但'wmic'和'for'的想法对我很有帮助。谢谢! – Qwertiy

+0

@Qwertiy - 有什么样的错误? – npocmaka

+0

'.'。 - 类似于'意外的情况:(.' https://i.stack.imgur.com/rSpX2.png – Qwertiy

1

基于@npocmaka answer找到其他的解决办法:

@echo off 

set pid=0 
for /f "tokens=2 delims==; " %%a in ('wmic process call create "notepad.exe"^,"%~dp0." ^| find "ProcessId"') do set pid=%%a 
echo %pid% 

timeout 5 
taskkill /pid %pid% 
+0

很棒。我想避免使用'FIND'来使脚本更快。试图添加当前目录的 – npocmaka

+0

... – Qwertiy