Program.exeが処理中で実行されていないバッチを作成しようとしています。以下のコードが実行されます。 vb.netではこれは簡単ですが、プログラムを作成したくありません。 VBSスクリプトが機能すると思いますが、上記を実行するバッチルーチンを作成できるかどうかを確認しようとしています。
。コウモリ:
@ECHO OFF
REM peudo code:
If NOT program.exe Exist
'Do something.
上記は機能しないので、何が欠けていますか?
ここに行く:
@echo off
tasklist /FI "IMAGENAME eq program.exe" 2>NUL | find /I /N "program.exe" >NUL
if "%ERRORLEVEL%"=="0" echo Program is running.
Tasklist.exeを使用してプログラム名に一致するタスクのリストを取得し、findを使用してプログラムが実際にリストに存在するかどうかを判断します。
次に、findによって返されたエラーコードを使用して、見つかったかどうかを判断し、見つかった場合はコード(この場合はエコー)を実行します。
TasklistとFindからの出力はNULLに送信されます。
これが私の提案です:
@echo off
tasklist /FI "IMAGENAME eq program.exe" | findstr "program.exe" >nul
if %ERRORLEVEL% == 1 goto mycode
goto eof
:mycode
rem put your code here
:eof
exit
@ techie007が提案したように、完全一致のみを出力するため、tasklist /FI "IMAGENAME eq program.exe"
をお勧めします。したがって、cmd.exe
を検索しているときは、htcmd.exe
をヒットしていません。 。
なぜ彼がfind /I /N
を提案しているのかわかりませんが、個人的にはfindstr
の方がはるかに用途が広いので好きですが、彼の提案ではそれで仕事が終わります。
最後の部分は、私の提案が@ techie007のif %ERRORLEVEL% == 1 goto mycode
goto eof
と異なるところです。これは、if elseステートメントとして機能するため、プログラムが実行されていない場合は、mycode
に移動します(ここに入力します)よく...あなたのコード)それ以外の場合はeof
に移動し、バッチを終了します。
@ techie007の唯一の欠点は、if "%ERRORLEVEL%"=="0" echo Program is running.
です。これが真であるか偽であるかに関係なく、次のコード行が実行されます。これが、複数行のコードをサポートするため、goto
方法論の使用を推奨したかった理由です。
Windows7での次の作業。
tasklist | findstr /i "appName.exe" > nul && echo Yeah || echo Nope
同じ行の&&
の後のコマンドは、findstr
が"appName.exe"
を見つけたときに実行され、同じ行の||
の後のコマンドをスキップします。それ以外の場合、findstr
が"appName.exe"
を見つけられなかった場合、&&
の後のコマンドをスキップし、||
の後のコマンドを実行します。
成功および/または失敗のために複数のコマンドが必要な場合:
tasklist | findstr /i "appName.exe" > nul && (
echo.Yeah
echo.It's running.
) || (
echo.Nope
echo.Don't hope.
)
echo off
SETLOCAL EnableExtensions
set EXE=YourProgram.exe
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
echo Not running
pause
goto FIN
:FOUND
echo Running
pause
:FIN
これは私のために働いた。