find

问题描述 投票:-2回答:1

由于某些原因,即使在程序没有打开的情况下,它也会说 "真棒",即使我输入一个窗口名称,如 "asdfsd "或随机的东西。谁能帮帮我?

@echo off
:start
tasklist | find /I "WINDOWNAME"
if errorlevel 1 (
    echo awesome
)
goto :start
batch-file
1个回答
0
投票

首先,我建议不要使用 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 循环。

© www.soinside.com 2019 - 2024. All rights reserved.