2015-08-15 13 views
1

我正在嘗試編寫代碼循環並告訴某個進程是否打開。它應該是一個循環,可以實時顯示進程是否打開。換句話說,程序打開時文本會改變,關閉時會再次改變。相反,我得到的是具有相同文本的洪水,它不顯示下面的'回聲'。在Windows批處理查找打開的進程

我嘗試這樣做:

@echo off 
goto xera 
:start 
tasklist /FI "IMAGENAME eq notepad.exe" | find /I "notepad.exe" > nul 
IF %ERRORLEVEL% equ 0 ECHO is opened 
IF %ERRORLEVEL% equ 1 ECHO isnt opened 
:xera 
    set /p "=Status: " <nul &call :start //the code got 'stuck' here 
    ECHO Text 2 (doesnt show) 
    pause>nul 
+0

它不會顯示「文本2」,因爲您在進入它之前調用子例程。你將從字面上永遠達不到該代碼。但在光明的一面,您的流程狀態檢查器對我來說非常合適。 – SomethingDark

回答

1

您沒有正確終止您的子程序:start。請嘗試以下操作:

@echo off 
goto xera 
:start 
tasklist /FI "IMAGENAME eq notepad.exe" | find /I "notepad.exe" > nul 
IF %ERRORLEVEL% equ 0 ECHO is opened 
IF %ERRORLEVEL% equ 1 ECHO isnt opened 
exit /b 
:xera 
set /p "=Status: " <nul &call :start 
ECHO Text 2 (doesnt show) 
pause>nul 

我插入exit /b讓命令解釋器call聲明,實際上把它稱爲後返回的命令。您也可以使用goto :EOF。有關如何批量調用子例程的更多信息,請鍵入call /?

+0

是的,但是,如果我使用'goto:eof'代碼將只運行一次,但我想要的是代碼保留在循環中,以便始終說'process.exe'是否被打開。 – Ercnard

+0

代碼的哪個部分應該在循環中?當你在'call:start'命令後追加'&goto:xera'時,代碼會做你想要的嗎? – aschipfl

+0

這部分稱爲':start'。在Delphi中就像這樣:'procedure TForm1.Timer1Timer(Sender:TObject); 開始 如果ProcessVerify('notepad.exe')then // ProcessVerify是驗證打開的進程的函數 Label1.caption:='is opened'; else Label1.caption:='is not opened';' – Ercnard