少なくとも私のために働く:
> taskkill / f / impowershell.exe&&エコーが機能しました|| エコーが機能しません
成功:PID3228のプロセス「powershell.exe」が終了しました。
働いた
> taskkill / f / impowershell.exe&&エコーが機能しました|| エコーが機能しません
エラー:プロセス「powershell.exe」が見つかりません。
動作しません
したがって、適切な終了コードtaskkill
を返します。その出力のリダイレクトはこれとは何の関係もありません。ただし、失敗のエラーレベルは128です。エラーをチェックするには、実際には適切なイディオムを使用する必要があります。
また、に出力しているように見えるtaskkill
のでstderr
、リダイレクトするだけでも出力が表示されstdout
ます。上記のコードを次のように書き直すことを検討してください。
taskkill /F /IM itunes.exe >nul 2>&1
if errorlevel 1 (echo iTunes not found.) else (echo iTunes is killed.)
2>&1
リダイレクトは、標準エラー出力を広大な無にリダイレクトします。この時点で機能するはずの少なくとも1であるif errorlevel 1
かどうかをチェックします。errorlevel
ERRORLEVELnumber最後に実行されたプログラムが指定された数以上の終了コードを返した場合に真の条件を指定します。— <code> help if
0と比較しない限り、通常、 errorlevel
withをチェックすることは非常に悪い考えです。終了コードのセマンティクスは、ゼロ以外のシグナルが失敗することです。ここでのあなたの仮定は、失敗すると戻ってくるということでした。if %errorlevel%==
anything
taskkill
1
なぜあなたがこれを無限ループでやっているのか、私は親切に尋ねてもいいですか?taskkill
すでにのすべてのインスタンスを強制終了しますitunes.exe
。また、遅延なしでタイトループで実行しているため、バッチファイルの実行中にCPUコアが1つ消費される可能性があります。
ETA:あなたの編集を見落としました:なぜ地球上で中括弧ですか?バッチファイル内のブロックは、丸括弧で囲まれています。