由于某些原因,即使在程序没有打开的情况下,它也会说 "真棒",即使我输入一个窗口名称,如 "asdfsd "或随机的东西。谁能帮帮我?
@echo off
:start
tasklist | find /I "WINDOWNAME"
if errorlevel 1 (
echo awesome
)
goto :start
首先,我建议不要使用 find
仅仅是为了在整个输出的 tasklist
因为搜索字符串可能出现在其他地方,比如图片名称,这可能导致错误的匹配。
总之, tasklist
指挥 不设置 退场代码(ErrorLevel
) 当过滤器 /FI
没有找到匹配,但你可以检查输出是否以 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.
这个文本取决于系统的本地语言设置。为了使其与本地语言无关,你可以使用 a trick: tasklist
, 默认的输出格式是(/FO TABLE
),当至少遇到一个匹配项时,会返回不止一行,因为后面有两行头,是实际匹配项;如果没有匹配项,上述一行是唯一返回的。所以捕捉 tasklist
由a for /F
襻,使用选项 skip=1
. 该 for /F
循环将退出代码设置为 1
(不是 ErrorLevel
虽然)当它不迭代时,并以 0
当它至少迭代一次时。这个退出代码可以用 条件执行运算符 &&
和 ||
:
:start
timeout /T 1
(for /F "skip=1" %%I in ('tasklist /FI "WindowTitle eq WindowName"') do rem/) && (echo awesome) || (goto :start)
我插入了 timeout
指挥 为了避免CPU负荷过重,由 goto :start
循环。