等待进程在Windows批处理文件中结束

sch*_*mop 1 batch-file

我想编写一个Windows脚本,该脚本要等到给定进程(PID)结束后再执行某些操作。到目前为止,我有(PID = 1234):

:loop
set VAR="tasklist | find /i " 1234 " /c"
if NOT (' %VAR% ')=="0" goto loop
**do something**
Run Code Online (Sandbox Code Playgroud)

但已经行了

set VAR="tasklist | find /i " 1234 " /c"
Run Code Online (Sandbox Code Playgroud)

不起作用,它存储字符串而不是求值。还是应该这样?在这种情况下

if NOT (' %VAR% ')=="0" goto loop
Run Code Online (Sandbox Code Playgroud)

应该评估VAR的内容,但是如果我在控制台中手动输入,我会得到

"tasklist | find /i " was unexpected
Run Code Online (Sandbox Code Playgroud)

我了解其中的双引号

set VAR="tasklist | find /i " 1234 " /c"
Run Code Online (Sandbox Code Playgroud)

是有问题的,但是我需要在PID的每一侧都留一个空格(在示例中为1234),以确保它不是另一个进程(例如12345)的子字符串,才能正常工作。

有任何DOS专家吗?

MC *_* ND 5

:loop
tasklist | find " 1234 " >nul
if not errorlevel 1 (
    timeout /t 10 >nul
    goto :loop
)
Run Code Online (Sandbox Code Playgroud)

获取列表,在内容中搜索,如果找到(错误级别= 1时未找到),等待并循环

将数据放入变量

for /f %%a in ('tasklist ^| find /c " 1234 "') do set "var=%%a"
Run Code Online (Sandbox Code Playgroud)