1. ホーム
  2. スクリプト・コラム
  3. DOS/BAT(ドス・バット

CMDコマンドラインパイプラインコマンドの紹介

2022-01-02 16:38:19

I. パイプラインコマンドとは

  パイプラインコマンドは、コマンドの実行結果をフィルタリングして、必要な情報のみを残すものです。
  dir コマンドがディレクトリ内のすべてのフォルダとファイルを表示する場合、パイプコマンド| findstr ""を使って、dir の結果を必要な情報だけに絞り込むことができます。

| コマンドパイプ文字

書式:第一コマンド|第二コマンド[|第三コマンド...]。
最初のコマンドの結果を2番目のコマンドの引数として使用します。これはunixでは一般的なことだと覚えておいてください。

dir c:\find "txt"

上記のコマンドは、C:Find all of C:\ and find TXT stringsです。

FINDの機能については、FIND /?

フォーマットの自動フォーマットパラメータを使わずに、Aドライブを自動フォーマットするとこうなります。
echo y|format a: /s /q /v:system
formatを使ったことがある人は、ディスクがフォーマットされているかどうかを確認するためにyを入力しなければならないことを知っていると思いますが、このコマンドの前にecho yと|文字が設定されています。
このコマンドの結果は、formatコマンドに渡されます
を入力すると、自動的にy
(このコマンドは危険ですので、テストするときは注意してください)

最もよく使われるのは、次のような文への出力yです。

<ブロッククオート

echo y|delete *.txt /s

II. パイプコマンドの使用

1. Windows netstat ポート、プロセス占有を表示する。

// Suppose we need to determine who is occupying our port 9050

C:/>netstat -aon|findstr "9050"
TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 2016
// See, the port is occupied by the process number 2016, continue with the following command.
C:/>tasklist|findstr "2016"
tor.exe 2016 Console 0 16,064 K
// It's clear, tor.exe is occupying your port

2. フォルダのディレクトリ構造を確認する

ツリー > list.txt

ツリー /f >リスト.txt

3. 入出力リダイレクション

echo -c // -c: 改行なし、linuxでは-n。

入出力のリダイレクトを行います。
    それぞれの名前のついた実行に対して、3つのファイルが関連付けられています。標準入力ファイル、標準出力ファイル、そしてエラー出力ファイルです。
    unix/linuxではどんなデバイスもファイルとして扱われるため、標準入力ファイルは実際にはキーボードになります。
    標準出力とエラー出力ファイルは画面です。
> 出力リダイレクション
< 入力リダイレクション
<<入力の追加
Enter Append
ファイルディスクリプタ。
    各ファイルはファイル記述子で記述することができ、システムで12個用意されており、3~9個は任意に定義することができる。0-2系の定義は以下の通りです。
0 標準入力 キーボード
1 標準出力 ディスプレイ
2 エラー出力表示
つまり、上記の3つのファイルを0-2で表現することができます。
例:cmd>file //cmdの出力は、ファイルfileにリダイレクトされます。
     cmd>>file //cmd の出力は file に追加され、存在しない場合は作成されます。
     cmd 1>file //cmd を実行しているシェルの標準出力を 1 として file にリダイレクトします。
     cmd>file 2>&1 //cmdの出力をfileにリダイレクトし、2(エラー出力)を1(標準出力)にリダイレクトします。
                                   2 > 1 は 1 をファイルとして扱うので、1 へのエラーリダイレクトはすべて &1 を使用しなければなりません。
     cmd 2>file //エラー出力をファイルに転送する
     cmd>>file 2>&1 //エラーとコマンドの出力をファイルに追加する,cmd>>file,append;2>&1,エラー送信先を指定する。
                                       標準出力、標準入力はファイルに付加されるため、エラーとcmd出力はファイルに付加される
     cmd 1>>file 2>&1 //このコマンドは、前のコマンドと同じにすることができます。
     cmdfile2 //cmdの入力はfile1、結果はfile2に出力されます。
     cmd<<END //cmdはENDに遭遇するまで標準入力を使用し、その後終了します。
                                 理解する:cmdはデフォルトの標準入力を使用し、実行し、ENDに遭遇したときに追加するが、標準入力の出力は
                            注:linuxのシェルプログラミングの25章によると、間違って理解しようとしたのです。
                           これはシェルの構文です。セパレータとしてENDと解釈できます。
     cmd<&m //ファイル記述子mをcmdの入力として使用する。
     cmd>&m // ファイルディスクリプタ m を cmd の出力として使用する。
     cmd<&- //Close standard input.
!!! 注意
1. 入力および出力ディレクトリの前にスペースを追加しないでください、さもなければ予期しない問題が発生する可能性があります
2. 0 1 2 は >> または << 方向の文字を使用できません、例: 2>>&1 エラー

パイプ文字を使ってy/nを自動入力する

職場で、cmdコマンドを起動したときにプロンプトが表示されることがあります。例えば、pscpを使用したときに、次のようなメッセージが表示されます。
キーをキャッシュに保存しますか(y/n)
毎回yかnを入力する必要があり、javaやpythonのようにcmdコマンドを呼び出すとうまくいかないので、どうすればいいかというと、パイプ記号を使って、例えば、pscpというコマンドでは、以下の方法で自動的にyを記入することが可能です。

<ブロッククオート

echo y |pscp ......。

の後に操作コマンドの省略記号が続きます。
他の言語の呼び出しは、この先も問題なく動作します  

CMDコマンドラインパイプラインコマンドの使用方法については、今回で終了です。CMDパイプラインコマンドの詳細については、スクリプトハウスの過去記事を検索するか、以下の関連記事を引き続き閲覧してください。