Windows 2000 活用講座
Windows 2000 コマンドライン徹底活用

第6回 findコマンド

1.findコマンドの基本

塩田 紳二
2001/03/01

Windows 2000 活用講座
Windows 2000 コマンドライン徹底活用
コマンド プロンプト入門(その1)
コマンド・プロンプト入門(その2)
スクリプト入門(その1)
スクリプト入門(その2)
スクリプト入門(その3)
findコマンド
forコマンド(その1)
forコマンド(その2)

 前回まででスクリプトに関する基本的な解説が終わったので、今回からは、コマンドプロンプトで利用できるコマンドについて解説していくことにする。基本的には、cmd.exe/command.comが持つ内部コマンドと、Windows 2000が持つ、コンソールコマンド(ウィンドウを作らないコマンドプロンプトで利用できるもの)を対象とする。

 これらを使ってバッチ・スクリプトを作るのだが、MS-DOSの時代から、これはかなり制限のあるプログラミング環境で、ちょっと工夫しないと、実用的な機能をバッチ・スクリプトで実現するのは難しい。逆にそこが、プログラミングの腕の見せどころでもある。もしウィンドウを開いたり、何でも自由にしたりしたければ、Windows Scripting Host(WSH)でVBScriptやJScript、あるいはVisual Basicなどを使えばよいだろう。ただこのバッチ・スクリプトは、ある意味どんなWindows 2000上でも動かすことが可能で、コンポーネントのインストール状況に左右されるWSHとは違って、本当の共通スクリプト環境である。このため、たとえ普段使わないマシンでいきなり作業することになっても、バッチ・スクリプトを簡単に書けるようになっていれば、ほとんど怖いモノなしともいえる。

 さて今回は、外部コマンドであるfind.exeを取り上げる。

findコマンドを使う

 findコマンドは、指定した文字列をファイルの中から行単位で検索するためのコマンドであり、その書式は、

find [/v][/c][/n][/i] "検索文字列" ファイル名...

となっている(コマンドプロンプト上で「find /?」を実行すれば、詳しいヘルプ情報が得られる)。ここで、各オプションは、

/v 指定した文字列を含まない行を出力する
/c 指定した文字列を含む行の数(行数)を出力する
/n 出力する行の前に行番号を付ける
/i  大文字と小文字を区別しないで検索を行う

となっている。例えば“name”という文字列を含む行をtext.txtというファイル中から探す場合には、

C:\cmd>find "name" text.txt

---------- TEXT.TXT
My name is Shioda.

C:\cmd>

とする。検索文字列は、必ずダブルクォート記号(" ")で囲む必要がある。また、ダブルクォートを含む文字列の場合には、文字列中では2つのダブルクォートを使用する。例えば「he said "This is a Pen."」という文字列を検索する場合には、

C:\cmd>find "he said ""This is a Pen.""" text.txt

---------- TEXT.TXT
he said "This is a Pen."

とする。検索先のファイル名は複数指定が可能で、Windows 2000のコマンドプロンプトではワイルドカードも利用できる(Windows 9xやMeの場合には、ワイルドカードは利用できなかった)。なおfindは行単位で検索を行うコマンドであり、2行以上にまたがるような文字列の検索は行えない。

C:\cmd>find "name" text*.*

---------- TEXT.TXT
My name is Shioda.

---------- TEXT02.TXT
My name is Smith.

 “/v”オプションは、指定した文字列を“含まない行”をすべて出力するオプションである。次の例でいうと、“name”という文字列を含まない行が表示される。

C:\cmd>find /v "name" text.txt

---------- TEXT.TXT
This is a pen.
he said "This is a Pen."

 “/c”は、指定した文字列を含む行の数を出力する。例えば、

C:\cmd>find /c "name" text.txt

---------- TEXT.TXT: 1

となる。これは、“name”を含む行が1行あるということを表している。

 “/n”は、文字列を検索して該当の文字列を含む行を表示するときに、先頭に行番号を表示するオプションである。

C:\cmd>type text02.txt
My name is Smith.
This is my pen.
"OK"
My pen is red.
His pen is green.
Her pen is blue.

C:\cmd>find /n "pen" text02.txt

---------- TEXT02.TXT
[2]This is my pen.
[4]My pen is red.
[5]His pen is green.
[6]Her pen is blue.

このように、行の先頭に“[”と“]”で囲まれて行番号が表示される。

 “/i”オプションは、大文字と小文字を区別させないようにするオプションである。このオプションが指定されていない場合、findは英字の大文字/小文字を区別した検索(例:“A”と“a”は異なるものとして扱う)を行う。

C:\cmd>find "pen" text.txt

---------- TEXT.TXT
This is a pen.

C:\cmd>find /i "pen" text.txt

---------- TEXT.TXT
This is a pen.
he said "This is a Pen."

また、findは、フィルタとしても利用可能で、この場合には、標準入力から入ってきたデータに対して検索を行う。このため、前述の例は、

C:\cmd>type text.txt | find "name"
My name is Shioda.

もしくは

C:\cmd>find "name" < text.txt
My name is Shioda.

と記述することもできる。ただしこの場合、ファイル名の表示が行われず、最初の例とは出力結果が異なることに注意されたい(余分な情報が表示されないので、こちらの方が便利なことも多いだろう)。

 ここでfindの検索結果の状態(指定した条件にマッチする文字列が見つかったかどうか)を調べる方法について述べておこう。このfindでは、検索結果の状態をerrorlevel(直前のコマンドの実行結果を表すコマンド)を使って通知することができる。検索が成功した場合には、errorlevelの値は0になるが、検索が失敗した場合(該当の文字列がなかった場合)には、errorlevelは1となる。また、引数の指定方法などが間違っていてエラーとなった場合は(例えば、検索文字列をダブルクォートでくくっていないときは)、errorlevelは2となる。ifコマンド中でこのerrorlevelの値を調べることにより、検索結果に応じた処理を行うことができる。


 INDEX
  [連載]Windows 2000 活用講座
  第6回 findコマンド
  1.findコマンドの基本
    2.findコマンドの活用
 
 連載
TechTargetジャパン
Windows Server Insider フォーラム 新着記事
  • .NET Frameworkのバージョンを確認する(更新) (2011/11/25)
     .NETアプリに必須の.NET Frameworkには多くのバージョンがある。どれがインストールされているかを素早く確認するバッチコマンドを紹介(.NET 4完全対応)
  • iPhone/iPod touchの無線LAN設定(iOS5更新版) (2011/11/24)
     基本的な接続手順からproxy設定、公衆無線LANとの接続方法まで、無線LAN(Wi-Fi)活用ノウハウの解説記事をiOS5向けに更新
  • 第294話 優れた記事の条件 (2011/11/22)
     伝えたい人に、伝えたい情報を届けるために、記事はどうあるべきなのか。諸君の意見を聞かせてくれたまえ
  • 次期SQL Server 2012は何が変わる? (2011/11/21)
     高可用性を実現するAlwaysOn、高速化を実現するカラムストアインデックス、高機能なセルフサービスBI、変更される課金方法など、次期SQL Serverを解説

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

@IT Sepcial
ソリューションFLASH