Batch-script-files-pipes

提供:Dev Guides
移動先:案内検索

バッチスクリプト-ファイルパイプ

パイプ演算子(|)は、あるコマンドの出力(デフォルトではSTDOUT)を受け取り、別のコマンドの入力(デフォルトではSTDIN)に送ります。 たとえば、次のコマンドはディレクトリC:\の内容をソートします

dir C:\ | sort

この例では、両方のコマンドが同時に開始されますが、dirコマンドの出力を受け取るまでsortコマンドは一時停止します。 sortコマンドは、dirコマンドの出力を入力として使用し、その出力をハンドル1(つまり、STDOUT)に送信します。

次は、pipeコマンドの別の例です。 この例では、ファイルC:\ new.txtの内容がパイプフィルターを介してsortコマンドに送信されます。

@echo off
TYPE C:\new.txt | sort

コマンドとリダイレクト演算子の組み合わせ

通常、パイプ演算子をリダイレクト演算子とともに使用して、パイプコマンドを操作する際に有用な機能を提供します。

たとえば、以下のコマンドは最初にC:\で定義されたすべてのファイルを取得し、次にpipeコマンドを使用して、拡張子が.txtのすべてのファイルを検索します。 次に、この出力を取得して、ファイルAllText.txtに出力します。

dir C:\ | find "txt" > AllText.txt

複数のパイプコマンドの使用

同じコマンドで複数のフィルターを使用するには、フィルターをパイプ(|)で区切ります。 たとえば、次のコマンドは、ドライブC上のすべてのディレクトリを検索し、文字列「Log」を含むファイル名を見つけて、一度に1つのコマンドプロンプトウィンドウに表示します-

dir c:\/s/b | find "TXT" | more

パイプフィルターの使用方法の例を次に示します。

次の例では、tasklistコマンドを使用して実行中のすべてのタスクのリストを送信し、出力をfindコマンドに送信します。 findコマンドは、メモ帳タイプのすべてのプロセスを検索し、コマンドプロンプトに表示します。

tasklist | find "notepad"

出力

次に出力例を示します。

notepad.exe               1400 Console            1      8,916 K
notepad.exe               4016 Console            1      11,200 K
notepad.exe               1508 Console            1      8,720 K
notepad.exe               4076 Console            1      8,688 K

次の例では、tasklistコマンドを使用して実行中のすべてのタスクのリストを送信し、moreコマンドに出力を送信します。 その後、moreコマンドは、実行中のタスクのリストを1ページずつ表示します。

tasklist | more

出力

Image Name                PID Session Name  Session#     Mem Usage
======================    ================  ===========  ============
System Idle Process           0 Services        0             4 K
System                        4 Services        0           276 K
smss.exe                    344 Services        0         1,060 K
csrss.exe                   524 Services        0         4,188 K
csrss.exe                   608 Console         1        58,080 K
wininit.exe                 616 Services        0         3,528 K
winlogon.exe                644 Console         1         5,636 K
services.exe                708 Services        0         7,072 K
lsass.exe                   716 Services        0        10,228 K
svchost.exe                 784 Services        0        10,208 K
svchost.exe                 828 Services        0         7,872 K
dwm.exe                     912 Console         1       208,316 K
nvvsvc.exe                  932 Services        0         6,772 K
nvxdsync.exe                968 Console         1        16,584 K
nvvsvc.exe                  976 Console         1        12,780 K
svchost.exe                1008 Services        0        20,340 K
svchost.exe                 224 Services        0        39,740 K
svchost.exe                 468 Services        0        11,864 K
svchost.exe                 860 Services        0        11,184 K
svchost.exe                 232 Services        0        16,992 K
wlanext.exe                1168 Services        0        12,840 K
-- More --

次の例では、tasklistコマンドを使用して実行中のすべてのタスクのリストを送信し、出力をfindコマンドに送信します。 findコマンドは、メモ帳タイプのすべてのプロセスを検索し、リダイレクトコマンドを使用してコンテンツをファイルtasklist.txtに送信します。

tasklist | find "notepad" > tasklist.txt

出力

ファイルtasklist.txtを開くと、次のサンプル出力が得られます。

notepad.exe            1400 Console            1      8,916 K
notepad.exe            4016 Console            1      11,200 K
notepad.exe            1508 Console            1      8,720 K
notepad.exe            4076 Console            1      8,688 K