taskkill
、tasklist
およびで実験しましfind
た。すべて一貫性のないエラーレベルを返します。これにより、エラーレベルを確実に使用して、プロセスが実行されているかどうか、またはプロセスが本当に終了したかどうかを知ることができなくなります。ただし、エラーレベルを使用せずにそれを行う方法を見つけました。
@echo off
setlocal ENABLEDELAYEDEXPANSION
set _i=0
for /f "delims=" %%i in ('tasklist ^| find /i "%1"') do set /a _i+=1
if !_i! GTR 0 (
echo Found !_i! instances of %1. Terminating all instances...
taskkill /im "%1" /f > nul 2>&1
echo Verifying that %1 has been terminated...
set _i=0
for /f "delims=" %%i in ('tasklist ^| find /i "%1"') do set /a _i+=1
if !_i! EQU 0 (
echo %1 was successfully terminated.
) else (
echo %1 was *not* teriminated. There are still !_i! instances running.
)
) else (
echo %1 is not running.
)
set _i=
endlocal
_i
変数を適切に評価できるように、遅延展開を有効にする必要があります。
for ... %%i
コード行は、プロセスがメモリ内にあるインスタンスの数に等しく設定さ_i
れます。find
は一貫したエラーレベルを返さないため、この手法を使用して、メモリ内にある回数を確実に見つけることができます...