このコマンドを1行で実行するためにWindows OSで使用できるパイプなどのようなものはありますか?
cmd.exe
とPowerShellはどちらも、あるコマンドから別のコマンドへのパイプをサポートしています。PowerShellでは次のようになります(これはコマンドラインの1行にあるか、 `を使用してスクリプトの改行をエスケープします):
netstat -ano
| select -skip 4
| % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}}
| ? {$_.Fields[1] -match '15120$'}
| % {taskkill /F /PID $_.Fields[4] }
どこ:
Select -skip 4
最初の4つのヘッダー行をスキップします。(Select
はSelect-Object
、オブジェクトのプロジェクトのようにSQL SELECTを実行するために使用されます。
%
は、パイプライン内のForeach-Object
各オブジェクト($_
)に対してスクリプトブロックを実行し、スクリプトブロックの結果をパイプラインに出力するための略語です。ここでは、最初のフィールドの配列への入力を分割し、2つのプロパティを持つ新鮮なオブジェクトを作成してOriginal
から、文字列netstat
とFields
、作成した配列。
?
はWhere-Object
、スクリプトブロックの結果に基づくフィルターの略です。ここでは、2番目のフィールドの最後の正規表現に一致しています(すべてのPowerShellコンテナーはゼロベースです)。
(最後の要素を除いてすべてテスト済み:プロセスの強制終了を開始したくありません:-))。
実際には、これを単純化します。最初から0またはPID foreach
(ヘッダーを無視するように設計されています)のみを返し、を呼び出す前に0以外の値でフィルタリングしますtaskkill
。これはタイプするのは速くなりますが、PowerShellを知らないと理解するのが難しくなります。
findstr
(Windowsgrep
)を見てください。次に例を示しますnetstat -a -o -n | findstr "LISTENING" | findstr ":135"
。多分これはあなたに一歩近づくでしょう;)