在管道中使用时查找命令不起作用

Find command not working when used in pipe

echo off

:loop

tasklist /fi "imagename eq Notepad.exe" | find "INFO:" > nul

if errorlevel 1 goto loop

wordpad.exe

这在 XP 中不起作用。它在 Windows 7.

中运行良好

当任务列表中不存在 notepad.exe 时,tasklist /fi "imagename eq Notepad.exe" 将 "INFO:" 行转储到 Windows XP 中的标准错误。您可以使用 2>&1 将 stderr 重定向到 stdout,但直接 find /i "notepad" 更容易。

附带说明一下,您可以使用 conditional execution.

而不是 if errorlevel 1
@echo off
setlocal

:loop

rem // Output nothing for the following code block.
>NUL 2>NUL (

    rem // Make sure notepad is not running before continuing.
    tasklist /fi "imagename eq notepad.exe" | find /i "notepad" && (

        rem // Notepad is in tasklist.  Sleep 1 second, then check again.
        timeout /t 1 /nobreak || ping -n 2 localhost
        goto loop
    )
)

wordpad.exe