Você deve ler alguma documentação. Você pode começar digitando help if
ou if /?
na linha de comando, e se você ler atentamente, verá um problema com sua lógica.
IF ERRORLEVEL 0
significa "retornar TRUE se ERRORLEVEL for > = 0". Isso sempre será verdade depois de executar o FINDSTR.
Se você não tiver TIMEOUT antes do seu IF, pode simplesmente usar a condição IF NOT ERRORLEVEL.
:loop
(type "File" | findstr Idle) > nul 2>&1
if not errorlevel 1 goto loop
Mas a lógica é destruída quando você adiciona o comando TIMEOUT porque ele limpa o ERRORLEVEL para 0. Portanto, você deve salvar o valor em sua própria variável antes de executar o TIMEOUT.
:loop
(type "File" | findstr Idle) > nul 2>&1
set err=%errorlevel%
timeout 1
if %err% == 0 goto loop
Mas eu usaria &&
:
:loop
type "File" | findstr Idle >nul 2>nul && (timeout 1 & goto :loop)
Ou melhor ainda:
:loop
findstr Idle "File" 2>nul >nul && (timeout 1 & goto :loop)