1. ホーム
  2. windows

[解決済み] .BATから使用中のポートを検索してプロセスを停止させる

2022-06-18 05:02:41

質問

Windows では、何がポート 8080 を探し、.BAT ファイルを通して使用中のプロセスを終了させることができますか?

どのように解決するのですか?

以下は、そのためのコマンドです。

FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P

バッチファイルの作成に自信がついたら、次のように @ECHO .

FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P

OSが異なる場合は、これを少し変更する必要があるかもしれないことに注意してください。 例えば、Windows 7 では tokens=5 の代わりに tokens=4 .

この仕組みについて

FOR /F ... %variable IN ('command') DO otherCommand %variable...

これにより command を実行し、その出力をループします。 それぞれの行は %variable に詰められ、展開されると otherCommand を何度でも、好きな場所で展開することができます。 %variable は、実際の使用では一文字の名前しか持つことができません。 %V .

"tokens=4 delims= "

これにより、各行を空白で分割し、その行の4番目のチャンクを取り出し、それを %variable (に詰め込みます(この例では %%P ). delims は空白に見えますが、この余分なスペースは実は重要なのです。

netstat -a -n -o

実行すればわかります。 コマンドラインのヘルプによると、"すべての接続とリスニングポートを表示します"、"アドレスとポート番号を数値で表示します"、"それぞれの接続に関連する所有プロセスIDを表示します"。 誰かが提案したので、これらのオプションを使用したところ、たまたまうまくいきました :)

^|

これは、最初のコマンドやプログラムの出力を取り込みます ( netstat ) の出力を受け取り、それを二番目のコマンドプログラム ( findstr ). もし、これをコマンド文字列の中ではなく、コマンドラインで直接使う場合は | の代わりに ^| .

findstr :8080

これは、渡されたすべての出力をフィルタリングし、以下のものを含む行だけを返します。 :8080 .

TaskKill.exe /PID <value>

プロセスIDを使用して、実行中のタスクを終了させます。

%%P instead of %P

これは、バッチファイルでは必須です。 もし、コマンドプロンプトでこれを行った場合、次のようになります。 %P を代わりに使用します。