我想编写一个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专家吗?
: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)