3

実行中のプロセスを見つけて、PSLIST と PSKILL を使用して強制終了しようとしていますが、エラーレベルを適切に設定できません。方法によっては、0 または 1 でスタックします。元々、Taskkill コマンドと Tasklist コマンドを実行するコードがありましたが、このコードは Windows 2000 と XP で実行する必要があります。

また、バッチファイルを編集するためにメモ帳++を実行しています。次のコードは、notepad++ と notepad.exe を区別していません。

@echo off

reg.exe ADD "HKCU\Software\Sysinternals\PsKill" /v EulaAccepted /t REG_DWORD /d 1 /f >NUL
reg.exe ADD "HKCU\Software\Sysinternals\PsList" /v EulaAccepted /t REG_DWORD /d 1 /f >NUL

rem just to see output of pslist
PSLIST "notepad" 2>NUL
ECHO.
ECHO. 
PSLIST "notepad" 2>NUL | FIND /I /N "notepad"
echo The error level is %errorlevel%


IF %errorlevel% EQU 0 (
    ECHO Notepad is running and will be terminated.
    ECHO.
    PSKILL "notepad.exe" 2>NUL
)
IF %errorlevel% EQU 1 (
    ECHO Notepad was not running.
    ECHO Starting Notepad now...
    ECHO.
    start "" "notepad.exe"
)

Pause
EXIT

上記のコードは 0 でスタックします。FIND コマンドで行を FINDSTR に変更するとPSLIST "notepad" 2>NUL | FINDSTR /I /N "notepad.exe"、1 でスタックします。

PSLIST および FIND または FINDSTR コマンドを取得して、完全に一致する正しいエラーレベルを返す方法はありますか?

4

2 に答える 2

2

これを試してください(興味深い行のみを表示します):

PSLIST "notepad++" 2>NUL | FINDstr /I "notepad++"
echo %errorlevel%
PSLIST "notepad" 2>NUL | FINDstr /I "notepad[^+]"
echo %errorlevel%
于 2013-07-10T18:25:48.847 に答える