find.exe の代替としての find.net.exe(find.net2.exe/find.net4.exe)

## 概要

Windows上でログの検索とかをする際、find.exe や findstr.exe を使うと思うけど、その代替となるようなプログラムを作ってみた。

UNIX なら grep があるのに...になんて言わない事。

## 作成のきっかけ

find.exe には一行あたりの最大サイズ(64kb!?)があって、一行がそれより長いとヒットしないとかいろいろと不都合があったので、当初は VBScript/WSH で作っていた。

.NET Framework/C# の勉強がてらに作ってみたのが、本作。

なので、CUI プログラムです。

## 配布元

[FIND.EXE のようなものスクリプト/プログラム](http://rocketeer.dip.jp/sanaki/free/free125.htm)

ダウンロードして、lzhを解凍して以下のプログラムがそれ。

- .NET Framework2
    - find.net2.exe
- .NET Framework4
    - find.net4.exe

一応、VBScript/WSH 版の find.vbs も同梱している。

## usage

<pre>
C:\&gt;find.net.exe
find.net.exe version 2.0.0.5
              Create by active@window.goukaku.com
               Compiled ver.v4.0.30319
               Runtime  ver.v4.0.30319(Win32)
usage: find.net.exe 検索文字列 [オプション]....
   /VV : 詳細表示
   /V  : マッチしなかったものをヒットとする
   /N  : 行番号を表示する
   /C  : ヒットした行数を表示する
   /I  : 大文字/小文字を区別しない
   /R  : 検索文字列を正規表現とみなす
   /U  : ユーザ定義関数を使用する
         既定は 言語:&quot;VBScript&quot; で書かれた &quot;find.net.exe.script&quot; というファイル
   -ScriptFile &lt;&lt;スクリプトファイル&gt;&gt;
         /U 時のスクリプトファイルを指定する
   -ScriptLanguage &lt;&lt;スクリプト言語名&gt;&gt;
         /U 時のスクリプト言語名(既定は「VBScript」)
   -ScriptFile_CharSet &lt;&lt;文字コード&gt;&gt;
         /U 時のスクリプトファイルの文字コード(既定は「Shift_JIS」)
   -InputFile &lt;&lt;入力ファイル&gt;&gt;
         入力元を &quot;標準入力&quot; からファイルに切り替える
   -DisplayFileName
         ヒットしたら一度だけファイル名も表示する
   -Program &lt;&lt;外部プログラム&gt;&gt;
         ヒットしたらファイルを外部プログラムで起動する
   -ProgramArgs &lt;&lt;外部プログラムの引数&gt;&gt;
         ヒットしたらファイルを外部プログラムで起動する、その引数(ファイル名は「%s」に置換さ れる)
   -ProgramTempDir &lt;&lt;外部プログラムの一時フォルダ&gt;&gt;
         ヒットしたらファイルを外部プログラムで起動する、そのワーキングディレクトリ
   -InputFile_CharSet &lt;&lt;文字コード&gt;&gt;
         入力ファイルの文字コード(既定は「Shift_JIS」)
   -AfterLine &lt;&lt;行数&gt;&gt;
   -BeforeLine &lt;&lt;行数&gt;&gt;
         ヒットした前後の行を表示する
   -DisplayNoHit
         ヒットしなくても表示する
   -SoundHitFile &quot;Wavファイル&quot;
         ヒットした際にサウンドを鳴らす
   -SpeakHitMessage &quot;文字列&quot;
         ヒットした際にしゃべらせる文字列
         voice List is
                Microsoft Haruka Desktop(ja-JP)
                Microsoft Zira Desktop(en-US)
</pre>

## 例(単純検索)

log.txt から exploit を検索

> c:\>find.net4.exe exploit -InputfFle log.txt

または
> c:\>type log.txt | find.net4.exe exploit

## 例(ヒットした周辺を表示)

log.txt から exploit を検索して、前後5行を表示

> c:\>type log.txt | find.net4.exe exploit -AfterLine 5 -BeforeLine 5

## 例(文字コード指定)

log.txt を utf-8 として読み込み、exploit を検索

> c:\>find.net4.exe exploit -InputfFle log.txt -InputFile_CharSet UTF-8

## 例(正規表現で検索)

> c:\>type log.txt | find.net4.exe "[0-9]*" /R

## 例(検索条件を VBScript で記述)

VBScriptなスクリプト(find.net.exe.script)に検索条件をプログラムして、

> c:\>type log.txt | find.net4.exe aa /U -ScriptFile find.net.exe.script

という感じ。

スクリプト検索なので、第一引数の検索文字列は使わないけど、引数の解析処理の都合上、適当な文字列を与えてください。

具体的なスクリプトは、サンプルの find.net.exe.script を参照してほしい。

## 例(type の代替)

> c:\>find.net4.exe exploit -InputfFle log.txt -DisplayNoHit

あまり意味はない。

## 例(type の代替、行番号付き)

行番号付きでTypeする/catする

> c:\>find.net4.exe exploit -InputfFle log.txt -DisplayNoHit /N

## 例(ヒットしたらサウンド再生)

-SoundHitFile オプションを使ってくれ

## 例(ヒットしたら音声合成)

find.net4.exe だけなのだが(つまり.NET Framework4以降と MS-Office2010以降)、-SpeakHitMessage オプションを使うと、テキストメッセージを音声合成で発声させる事もできる。

## 例(複数ファイルを検索する時の便利 Tips)(2019/08/27)

ver2.4(ver2.0.0.5)から、「-DisplayFileName」オプションを新設した。

これは、例えば、
`FOR /R c:\z\ %i in (*.php) DO find.net4.exe xss_clean -InputFile %i -DisplayFileName`

のようにバッチファイルを使って、複数のファイルを検索した時、ヒットしてもどのファイルか分からないので、このオプションを作った。
このオプションを指定した場合、初めてヒットした時にファイル名も表示される。

ちなみに「-InputFile」オプション指定時のみです。

## 例(ヒットしたファイルをプログラムに読み込む)(2019/08/27)

ver2.4(ver2.0.0.5)から、「--Program」「-ProgramArgs」「-ProgramTempDir」オプションを新設した。

これは、ヒットしたファイルを別のプログラム(メモ帳などのテキストエディタを想定しているけど)に読み込ませる。

検索だけ、find.net.exeで実施して、その後の編集などは別のプログラムで行いたい時に便利かと思う。

ちなみに「-InputFile」オプション指定時のみです。

## リンク

- [アーカイバ内部のLog4jのバージョンを調べる](https://qiita.com/tomoki0sanaki/items/e3b435fa19c84d3735a0)


## 以上