由于某种原因,即使程序未打开,即使我输入了诸如“ asdfsd”之类的窗口名或一些随机名称,它的显示也很棒。有人可以帮忙吗?
@echo off
:start
tasklist | find /I "WINDOWNAME"
if errorlevel 1 (
echo awesome
)
goto :start
答案 0 :(得分:0)
首先,让我建议不要使用find
只是为了在tasklist
的整个输出中找到某个窗口标题,因为搜索字符串可能会出现在其他位置,例如图像名称,例如,这可能导致错误的匹配。
无论如何,当过滤器/FI
未找到匹配项时,tasklist
command不会设置exit code (ErrorLevel
),但是您可以检查输出是否以INFO:
开头,没有遇到匹配的情况是什么
:start
timeout /T 1
tasklist /FI "WindowTitle eq WindowName" | findstr /B "INFO:" > nul && (echo goto :start) || (echo awesome)`.
这取决于在没有匹配项的情况下返回的单行:
INFO: No tasks are running which match the specified criteria.
此文本取决于系统的区域设置/区域/语言设置。要使它甚至与语言环境无关,可以使用一个技巧:使用默认输出格式(tasklist
)的/FO TABLE
在遇到至少一个匹配项时返回多个行,因为存在两行标题,后跟实际匹配项;如果没有匹配项,则上述行是唯一返回的行。因此,使用选项tasklist
通过for /F
loop捕获skip=1
的输出。然后,for /F
循环将在未迭代时将退出代码设置为1
(但不是ErrorLevel
),并在至少迭代一次时将退出代码设置为0
。可以使用conditional execution operators &&
and ||
检查该退出代码:
:start
timeout /T 1
(for /F "skip=1" %%I in ('tasklist /FI "WindowTitle eq WindowName"') do rem/) && (echo awesome) || (goto :start)
我插入timeout
command是为了避免goto :start
循环给CPU带来沉重负担。