Windows環境でGrepする方法

いつもお世話になっております。
RfromL.comです。

今回はWindows環境でGrepする方法についてです。

随分昔のことですが、UNIX系OS環境の現場からWindows系環境の現場に移った時にgrepコマンド無いんかい!と思った経験がありました。
同じ事を思った人も居るんじゃないかなということで、当時自分用に作成した手順メモを基にWindows環境でgrepする手段について説明します。

TABLE OF CONTENTS

1.概要
 1.1.grepについて
 1.2.各手段の簡易説明
 1.3.実行環境
 1.4.目的と条件の具体例
2.サクラエディタ(grep機能)
 2.1.手順
 2.2.解説
3.Windowsコマンド(findstrコマンド)
 3.1.手順
 3.2.解説
4.バッチスクリプト(findstrコマンド)
5.おわりに


1.概要

1.1.grepについて

grepというのはUNIX系OS(Linux、solaris、AIXなど)で利用可能なコマンドのことで、簡単に言うと指定したキーワードを含むファイルを検索する機能をもつコマンドです。

使う場面としては、ファイル内から特定のデータを検索したり、データベースの項目定義情報を変更する際に影響調査としてどこのプログラムで該当の項目を利用しているか調査したりと、Unix系OSの環境では使用頻度上位のコマンドです。
(この投稿にたどり着いた方には説明不要かもしれませんが・・・)

本投稿ではWindows環境でgrepに近いことをする為の手段として以下3つの方法を説明します。
①サクラエディタ(grep機能)
②Windowsコマンド(findstrコマンド)
③バッチスクリプト(findstrコマンド)

1.2.各手段の簡易説明

①サクラエディタ

サクラエディタの場合はGrep機能を備えているので、このGrep機能を使う手順です。

他の高機能テキストエディタでもGrepできるものもありますが、できないエディタもあります。
有名どころのエディタでも「秀丸」にはあって「TeraPad」にはないようです。
本投稿では僕がサクラ使いなので、サクラエディタで行っています。

②Windowsコマンド

Windows環境では「grep」という名前のコマンドが無いのですが、代替となるコマンド「findstr」コマンドがあります。
この「findstr」コマンドをgrepの代替として利用する手順です。

③バッチスクリプト

「findstr」コマンドを実行する対話形式バッチスクリプトを用意して利用する手順です。

※工事中!
スクリプト自体は出来ていますが、検証に時間がかかっているので後日更新します!

1.3.実行環境

この投稿を書くにあたって実行した際の環境は以下となります。

OSMicrosoft Windows 10 Pro Version 21H1
サクラエディタVer.2.2.0.1
バージョン等情報
フォルダパス内容
C:\RfromL_com\bin\exeなどの実行ファイルを格納するフォルダ
C:\RfromL_com\prod\bat、vbsなどプログラムを格納するフォルダ
C:\RfromL_com\date\txt、datなどファイルを格納するフォルダ
C:\RfromL_com\tool\ツール類を格納するフォルダ
C:\RfromL_com\win-grep\grep用バッチスクリプトを配置するフォルダ
フォルダ構成

1.4.目的と条件の具体例

本投稿でGrepを使用する際の想定の目的例(状況)と、抽出対象とする条件例です。
適当に考えた状況なので突っ込みどころがあってもあまり気にしないでください・・・

目的例
・VBSファイルを「cscript」で実行しているbatスクリプトを知りたい。
・Callで別のbatスクリプトを実行しているbatスクリプトを知りたい。
・戻り値を指定せずに「exit」しているbatスクリプトを直したい。
・/B オプションを指定せずに「exit」しているbatスクリプトを直したい。


調査対象ファイル
「C:\RfromL_com\prod\」フォルダに格納されているプログラムのうち「バッチスクリプト」(拡張子:bat)を調査対象とする。


調査対象キーワード
調査対象ファイルのうち以下a・b・cいずれかに該当する箇所を抽出します。
a.「cscript」使用箇所。
b.batファイルを実行している「call」使用箇所。
c.オプション「/B」を未指定、または「戻り値」(0や9など)を未指定の「exit」使用箇所。


抽出対象の例
a.「cscript」の使用箇所


b.batファイルを実行している「call」の使用箇所


c.「exit」だけの箇所



抽出対象外の例
a.「cscript」を使用している箇所全てですので、除外例は無しです。

b.別batを実行しない「call」箇所は抽出対象外とします。


c.「exit 0」「exit 9」「exit /B」「exit /B 0」などは抽出対象外とします。


2.サクラエディタ(grep機能)

2.1.手順

①サクラエディタを起動
まずはサクラエディタを起動します。


②Grep条件入力ウィンドウを起動
「CTRL」キー + 「G」キー でGrep条件入力画面を表示します。



③各種実行条件を指定
指定内容は以下の通りです。

「条件(N)」の欄に検索したいキーワード「cscript|call.*bat|exit\s*$」を入力。
「ファイル(T)」の欄に検索対象とするファイル名「*.bat」を入力。
「フォルダ(O)」の欄に検索対象とするフォルダパス「C:\RfromL_com\prod」を入力。
「サブフォルダからも検索する(S)」のチェックボックスをオン。
「正規表現(E)」のチェックボックスをオン。
「結果出力」のラジオボタンを「該当行(L)」に選択。
「結果出力形式」のラジオボタンを「ノーマル(M)」に選択。


④Grep実行
「検索(F)」ボタンを押下して検索を実行します。


⑤実行結果
処理が完了すると結果が一覧表示されます。

2.2.解説

「Grep条件入力」ウィンドウで指定した各条件について、ひとつづつ説明します。

「条件(N)」の欄に検索したいキーワード「cscript|call.*bat|exit\s*$」を入力。

上記の検索キーワードは以下の3つの条件を「|」(パイプ)で繋げる事でいずれかの条件を満たす(OR条件)箇所を抽出しています。

条件1.「cscript」
「cscript」の使用箇所全てを抽出します。

条件2.「call.*bat」
ここで使用している正規表現

.改行を除く任意の1文字と一致。(要するにワイルドカード)
*直前のパターンの0回以上の繰り返し。

「call」で始まり「bat」で終わる文字列を抽出する条件となっています。
ここでいう「始まり」「終わる」は行頭・行末を意味していないので、この条件は「call」の前や「bat」の後に何らかの文字列がある場合(行中)も一致します。

条件3.「exit\s*$」
ここで使用している正規表現

\sスペース(空白類文字)と一致。
*直前のパターンの0回以上の繰り返し。
$行末

「exit」の後ろに行末までスペース(空白類文字)がある「exit」を抽出します。
また、+(直前のパターンの1回以上の繰返し)ではなく*(直前のパターンの0回以上の繰返し)なので「exit」の後ろに行末までスペースが無い「exit」(「exit」直後が行末の箇所)も併せて抽出します。

「ファイル(T)」の欄に検索対象とするファイル名「*.bat」を入力。

ファイル名を*(アスタリスク)であいまい指定にすることで、拡張子が.batのファイル全てに対して検索します。

「フォルダ(O)」の欄に検索対象とするフォルダパス「C:\RfromL_com\prod」を入力。

書いてある通りですね。
「C:\RfromL_com\prod」フォルダ配下に対して検索します。

「サブフォルダからも検索する(S)」のチェックボックスをオン。

「フォルダ(O)」の欄に指定したパス配下に存在するフォルダの更に配下まで検索対象に含めます。
このチェックを外すと、指定したパス直下にあるファイルのみを検索します。

「正規表現(E)」のチェックボックスをオン。

「条件(N)」に指定した値を、正規表現を有効にした状態で検索します。
このチェックを外すと、正規表現を無効にした検索となり、パターンマッチではなく指定した値そのままの文字列検索を行います。

「結果出力」のラジオボタンを「該当行(L)」に選択。

検索結果を出力する際、検索条件に一致した箇所が存在する”行”を出力します。
検索キーワードがどういう使われ方をしているか判断したいことがほとんどなので、大体この指定をしています。

他の指定については以下に記します。


該当部分(P)を指定した場合
「条件(N)」に一致したキーワードのみを出力します。



非該当行(1)を指定した場合
「条件(N)」に一致しなかった”行”を出力します。
調査対象のキーワード条件によってはこちらを使う事もあります。


「結果出力形式」のラジオボタンを「ノーマル(M)」に選択。

抽出結果を出力する際のレイアウトを指定する項目です。
影響調査結果としてgrep結果をリスト化することが多かったので、いつも「ノーマル(M)」を指定していました。

他の指定については以下に記します。


「ファイル毎(I)」を指定した場合
条件に一致したファイル毎に、ファイルフルパスをヘッダーとして区切って表示してくれます。
こっちの指定を使うかどうかは好みかもしれません。



「結果のみ(R)」を指定した場合
条件に一致したキーワードのみを出力します。

この指定ではファイルパスが一切表示されないので、今回のように検索対象ファイルを複数ファイルにした場合は、どのファイルで使用されているのかわからなくなるので注意です。


3.Windowsコマンド(findstrコマンド)

3.1.手順

①コマンドプロンプトを起動
まずはコマンドプロンプトを起動します。
「ウィンドウズボタン」+「R」キーで「ファイル名を指定して実行」ウィンドウを開きます。



「名前(O:」欄に「cmd」と入力して「Enter」キーを押下、または「OK」ボタンをクリック。


コマンドプロンプトが起動します。



②「findstr」コマンドの実行
以下のコマンドを入力して「Enter」キーを押下します。

findstr /S /I /N /P /R /C:"cscript" /C:"call.*bat" /C:"exit[ ]*$" "C:\RfromL_com\prod\*.bat" >C:\RfromL_com\win-grep\result\findstr_bat.txt



③実行結果の出力を確認
リダイレクト先に指定したファイル「C:\RfromL_com\win-grep\result\findstr_bat.txt」のフォルダパス「C:\RfromL_com\win-grep\result」にファイルが出力されています。



④出力内容を確認
ファイル「findstr_bat.txt」を開くと、条件に一致した箇所が出力されています。

3.2.解説

ここでは手順②で実行しているコマンドについて解説します。

findstr /S /I /N /P /R /C:"cscript" /C:"call.*bat" /C:"exit[ ]*$" "C:\RfromL_com\prod\*.bat" >C:\RfromL_com\win-grep\result\findstr_bat.txt

上記のコマンドを各ブロックに分けて解説するとそれぞれの以下の通りとなります。

findstrコマンドのオプション指定

findstr /S /I /N /P /R /C:

「findstr」コマンドを実行するにあたって指定しているオプションです。
今回指定しているオプションの説明は以下の通りです。

オプション説明
/S現在のディレクトリとすべてのサブディレクトリを検索します。
/I文字列を検索するときに文字の大文字と小文字を無視します。
/N一致する各行の行番号を出力します。
/P印刷できない文字を含むファイルをスキップします。
/R検索文字列を正規表現として処理します。 これが既定の設定です。
/C:指定したテキストをリテラル検索文字列として使用します。


検索キーワード指定

/C:"cscript" /C:"call.bat" /C:"exit[ ]$"

検索キーワードをしているしている箇所です。
サクラエディタの手順同様、キーワードとしては3つあります。
「cscript」「call.*bat」はサクラエディタの指定と同じですが、「exit」検索の記述方式が若干異なっています。

findstrコマンドの正規表現では、スペースを表す時に「\s」という指定が使用できません。
そのため、そのまま半角スペースを記述しています。


検索対象ファイル指定

"C:\RfromL_com\prod\*.bat"

検索対象のファイルを指定している箇所です。
サクラエディタの手順同様、「C:\RfromL_com\prod\」フォルダ配下に対し、*(アスタリスク)指定でbatファイル全てを検索対象としています。


検索結果出力先ファイル指定

>C:\RfromL_com\win-grep\result\findstr_bat.txt

検索結果を出力する先のファイルを指定している箇所です。
「findstr」コマンドの実行結果を「>」(新規作成リダイレクト)で「C:\RfromL_com\win-grep\result\findstr_bat.txt」のファイルに出力しています。

3.3.補足事項

findstrコマンドのオプションについての補足事項です。

大体のオプションは前項の解説に書いてある通りですが、オプション「/R」と「/C:」の使用には注意する点があります。


「/R」オプションについての補足事項
オプションの説明に「既定の設定です」とある通り「/R」を指定しなくても正規表現は使えます。
ただし、今回のように複数のキーワードを指定し、且つ1個目のキーワード「cscript」で正規表現が使用されていない場合、「/L」オプション(検索文字列をリテラルで処理)が指定された状態となり、正規表現を使用している二つ目以降のキーワード「call.bat」「exit[ ]$」が正規表現ではなく、入力した値そのままの文字列で検索が行われてしまいます。

また、下記のようにキーワードの指定順を変えて正規表現を使用したキーワードを一個目にすると「/R」オプションを指定しなくても正規表現が有効になります。

findstr /S /I /N /P /C:"call.*bat" /C:"cscript" /C:"exit[ ]*$" "C:\RfromL_com\prod\*.bat"

もしかしたら僕の環境だけでの挙動という可能性もありますが、予期せぬ動きを防ぐためにも正規表現を使用する場合は「/R」オプションで正規表現を使うことを明示的に指定した方が良いと思われます。


「/C:」オプションについての補足事項
検索キーワードにスペースを使う場合は、このオプションを指定する必要があります。
今回は検索キーワードが3つ(複数)ありましたが、そのうち「cscript」と「call.*bat」の2つはスペースを使用しない条件です。
ですが、今回のコマンドではこちらにも「/C:」オプションを指定しています。これは、検索キーワードが複数あり、一個でも「/C:」オプションを指定した場合は、キーワード全てに「/C:」オプション指定しないと正しい挙動をしない為です。

今回のキーワードを例にすると、以下のような指定は正しく機能しないので注意してください。

findstr /S /I /N /P /R "call.*bat" "cscript" /C:"exit[ ]*$" "C:\RfromL_com\prod\*.bat"

また、スペースを使用する検索条件が無い場合であれば「/C:」オプションを指定せず、以下の記述で検索することが可能です。

findstr /S /I /N /P /R "call.*bat cscript" "C:\RfromL_com\prod\*.bat"

この場合は半角スペースが区切り文字として機能し、複数条件でのキーワード検索をしてくれます。


4.バッチスクリプト(findstrコマンド)

工事中!!スクリプト内容はかいておきますが、手順等については後日更新します;

今回作成するバッチスクリプトは以下の内容です。

[ win-grep.bat ]

@echo off
@rem ------------------------------------------------------------
@rem システム名         : RfromL.com
@rem シェル名           : win-grep.bat
@rem 処理名             : grep用バッチスクリプト
@rem 処理内容           : 対話形式でfindstrコマンドを実行し、
@rem                    : 結果をファイル出力する。
@rem 作成日             : 2021.09.27
@rem 作成者             : RfromL.com
@rem パラメータ         : なし
@rem 備考               : 使用コマンド
@rem                    :   findstr
@rem                    : 使用オプション
@rem                    :   /S /I /N /P (/R|/L) /C:
@rem                    : 
@rem *** 修正履歴 ***********************************************
@rem No.  日付        修正者              内容
@rem 001  2021.09.27  RfromL.com          新規作成
@rem 
@rem ------------------------------------------------------------
@rem - 初期処理
@rem ------------------------------------------------------------
:STEP000
@rem カレントフォルダ設定
set CMD_PATH=%~dp0

@rem ------------------------------------------------------------
@rem - フォルダ設定
@rem ------------------------------------------------------------
@rem grep結果出力先設定
set GREPOUT=%CMD_PATH%result\

@rem ------------------------------------------------------------
@rem - 定数設定 - 検索フォルダ設定
@rem ------------------------------------------------------------
@rem プログラム格納場所
set PRODDIR=C:\RfromL_com\prod
@rem ツールプログラム格納場所
set TOOLDIR=C:\RfromL_com\tool
@rem データファイル格納場所
set FILEDIR=C:\RfromL_com\date

@rem ------------------------------------------------------------
@rem - 定数設定 - 検索対象拡張子設定
@rem ------------------------------------------------------------
@rem batファイル
set BATD=bat
@rem VBSファイル
set VBSD=vbs
@rem 拡張子指定なし
set ALLD=*

@rem ------------------------------------------------------------
@rem - 定数設定 - その他
@rem ------------------------------------------------------------
@rem 出力ファイル名固定文字列
set OUTNM=win-grep

@rem ------------------------------------------------------------
@rem - 処理開始
@rem ------------------------------------------------------------
:START
echo ------------------------------------------------------------
echo   フォルダ内ファイル テキスト検索 (win-grep.bat)
echo ------------------------------------------------------------
echo ★検索フォルダ選択
echo   検索したいフォルダを番号で指定してください。
echo.
echo     1:prodフォルダ(*.bat)
echo     2:prodフォルダ(*.vbs)
echo     3:prodフォルダ(*.*)
echo     4:dateフォルダ(*.*)
echo     S:検索フォルダ詳細表示
echo     H:help
echo     X:exit
echo.

@rem ------------------------------------------------------------
@rem - 変数初期化
@rem ------------------------------------------------------------
:INIT
@rem 選択結果(入力値)格納用 (検索フォルダ・検索ファイル格納用)
set SFILE=
set SFILENM=
set SFILETYPE=
@rem 検索文字列(入力値)格納用
set SLETT=
@rem 正規表現 有効・無効オプション設定 ※初期値はリテラル検索指定
set GOPTYN=
set GOPT=/L
@rem スペース 有効・無効オプション設定初期化 ※初期値はスペース無効指定
set SOPTYN=
set SOPT=

@rem ------------------------------------------------------------
@rem - 検索フォルダ指定値取得・判定
@rem ------------------------------------------------------------
@rem : 入力待ち
set /P SFILE="  ⇒"

@rem : ヘルプ表示
if /i "%SFILE%" == "h"    goto HELP

@rem : 処理終了
if /i "%SFILE%" == "x"    goto EOF
if /i "%SFILE%" == "exit" goto EOF

@rem : 検索パス表示
if /i "%SFILE%" == "s"    goto SHOWD

@rem : 未入力エラー
if    "%SFILE%" == ""     goto NERR

@rem : 0~9までで未使用の番号
@rem : 今後、検索対象のフォルダが
@rem : 増えた時に追加番号を消す
if    "%SFILE%" == "0"    goto INFO
if    "%SFILE%" == "5"    goto INFO
if    "%SFILE%" == "6"    goto INFO
if    "%SFILE%" == "7"    goto INFO
if    "%SFILE%" == "8"    goto INFO
if    "%SFILE%" == "9"    goto INFO

@rem : 検索フォルダ設定
if "%SFILE%" == "1" (
    SET SFILENM="%PRODDIR%\*.%BATD%"
    SET SFILETYPE=_%BATD%
)
if "%SFILE%" == "2" (
    SET SFILENM="%PRODDIR%\*.%VBSD%"
    SET SFILETYPE=_%VBSD%
)
if "%SFILE%" == "3" (
    SET SFILENM="%PRODDIR%\*.%ALLD%"
    SET SFILETYPE=_ALL
)
if "%SFILE%" == "4" (
    SET SFILENM="%FILEDIR%\*.%ALLD%"
    SET SFILETYPE=_FILE
)

@rem : 上記以外の無効な入力値が指定された場合
if not "%SFILE%" == "" goto INFO

@rem ------------------------------------------------------------
@rem - 検索文字列取得・判定
@rem ------------------------------------------------------------
@rem : 入力待ち
set /P SLETT="検索文字列 (X:exit) ⇒"
if /i "%SLETT%" == "x"    goto EOF
if /i "%SLETT%" == "exit" goto EOF
if    "%SLETT%" == ""     goto NERR

@rem ------------------------------------------------------------
@rem - 正規表現 有効・無効選択
@rem ------------------------------------------------------------
@rem : 入力待ち
echo 正規表現を有効にしますか?
echo   有効 = Y、YES
echo   無効 = 上記以外、または未入力
set /P GOPTYN="⇒"

if /i "%GOPTYN%" == "y" (
    SET GOPT=/R
)

if /i "%GOPTYN%" == "yes" (
    SET GOPT=/R
)

@rem ------------------------------------------------------------
@rem - スペース 有効・無効選択
@rem ------------------------------------------------------------
@rem : 入力待ち
echo 検索文字列にスペースを含めますか?
echo ※注意:スペースを有効にした場合、複数キーワード検索は行えません。
echo   有効=Y、YES
echo   無効=上記以外、または未入力
set /P SOPTYN="⇒"

if /i "%SOPTYN%" == "y" (
    SET SOPT=/C:
)

if /i "%SOPTYN%" == "yes" (
    SET SOPT=/C:
)

@rem ファイル用タイムスタンプ取得(YYYYMMDD_hhmm)
call :TIMEGET

echo   starting search %SFILENM%
echo   please wait ...                                       %TIME%
echo folder: %SFILENM%  keyword: "%SLETT%"  %DATE% %TIME% > %GREPOUT%%OUTNM%%SFILETYPE%_%TIMESTR%.txt
echo.>> %GREPOUT%%OUTNM%%SFILETYPE%_%TIMESTR%.txt
echo.

echo findstr /S /I /N /P %GOPT% %SOPT%"%SLETT%"  %SFILENM%
echo %GREPOUT%%OUTNM%%SFILETYPE%_%TIMESTR%.txt
pause

@rem ------------------------------------------------------------
@rem - findstr 実行
@rem -   /S  : 現在のディレクトリとすべてのサブディレクトリから一致するファイルを検索します。
@rem -   /I  : 検索するときに大文字と小文字を区別しません。
@rem -   /N  : 一致する各行の前に行番号を出力します。
@rem -   /P  : 印刷不可能な文字を含むファイルをスキップします。
@rem -   /R  : 検索文字列を正規表現として処理します。
@rem -   /C: : 指定したテキストをリテラル検索文字列として使用します。
@rem ------------------------------------------------------------
findstr /S /I /N /P %GOPT% %SOPT%"%SLETT%"  %SFILENM% >> %GREPOUT%%OUTNM%%SFILETYPE%_%TIMESTR%.txt
if errorlevel 1 goto CERR
echo   %GREPOUT%%OUTNM%%SFILETYPE%_%TIMESTR%.txt に出力されました %TIME%
start  %GREPOUT%%OUTNM%%SFILETYPE%_%TIMESTR%.txt
echo.
echo.

goto START

@rem ------------------------------------------------------------
@rem - 検索パス表示
@rem ------------------------------------------------------------
:SHOWD
echo ------------------------------------------------------------
echo - 検索パス表示
echo ------------------------------------------------------------
echo    1:prodフォルダ(*.bat)  : %PRODDIR%\*.%BATD%
echo    2:prodフォルダ(*.vbs)  : %PRODDIR%\*.%VBSD%
echo    3:prodフォルダ(*.*)    : %PRODDIR%\*.%ALLD%
echo    4:dateフォルダ(*.*)    : %FILEDIR%\*.%ALLD%
echo.
echo.
goto START

@rem ------------------------------------------------------------
@rem - HELP表示
@rem ------------------------------------------------------------
:HELP
echo ------------------------------------------------------------
echo - HELP表示
echo ------------------------------------------------------------
echo   入力された情報を基に「findstr」コマンドを実行する処理です。
echo.
echo   [実行時に指定するfindstrオプション]
echo     /S  : 現在のディレクトリとすべてのサブディレクトリから
echo           一致するファイルを検索します。
echo     /I  : 検索するときに大文字と小文字を区別しません。
echo     /N  : 一致する各行の前に行番号を出力します。
echo     /P  : 印刷不可能な文字を含むファイルをスキップします。
echo     /R  : 検索文字列を正規表現として処理します。
echo     /C: : 指定したテキストをリテラル検索文字列として使用します。
echo.
echo   ・ 結果は下記のファイルに出力します
echo      %GREPOUT%%OUTNM%_検索文字列_対象ファイルタイプ.txt 
echo.
echo   ・ 検索フォルダ選択時に、番号の替わりにフォルダ名を直接入力することが出来ます
echo      例)C:\TEMP\*.*
echo.
echo   ・ 検索文字列の複数指定は間にスペースを入れて指定します
echo      例)KEYWORD1 KEYWORD2
echo.
echo   ・ 指定文字列には正規表現のパターンが使用できます
echo      ※正規表現で使用するメタ文字
echo        . ワイルドカード:任意の文字
echo        * 繰り返し:直前の文字またはクラスのゼロ個以上
echo        [class] 文字クラス:セットの任意の1 文字
echo        [^class] 逆クラス:セット以外の任意の文字
echo        例)WK[1-3] は WK1 WK2 WK3 を意味します
echo        \x エスケープ:メタ文字 x のリテラル使用
echo        - / $ . * ~ \  の文字を検索する時は、\ を各文字の前に付けて指定して下さい
echo.
echo.

goto START

@rem ------------------------------------------------------------
@rem - エラー処理
@rem -   findstrコマンド実行時にエラーが発生した場合に
@rem -   エラー内容を表示
@rem ------------------------------------------------------------
:CERR
echo  %SFILENM% には %SLETT% が見つかりませんでした。
echo   又は その他エラーが発生しています。
echo.

goto START

@rem ------------------------------------------------------------
@rem - 未入力チェック
@rem -   対話形式で未入力のまま実行された場合に表示
@rem ------------------------------------------------------------
:NERR
echo  入力されていません
echo.
echo.

goto START

@rem ------------------------------------------------------------
@rem - 未使用番号処理・対象外入力値
@rem -   対話形式で入力された値が、範囲外の場合に表示
@rem ------------------------------------------------------------
:INFO
echo  指定された入力値「%SFILE%」は対象外の入力です。
echo.
echo.

goto START

@rem ------------------------------------------------------------
@rem ファイル用タイムスタンプ取得(YYYYMMDD_hhmmss)
@rem ------------------------------------------------------------
:TIMEGET

set TIMETMP=%time:~0,1%

if "%TIMETMP%"==" " (
  set TIMETMP=0%time:~1,1%
) else (
  set TIMETMP=%time:~0,2%
)

set TIMESTR=%date:~0,4%%date:~5,2%%date:~8,2%_%TIMETMP%%time:~3,2%%time:~6,2%

exit /b

5.おわりに

今回はWindows環境でgrepする方法として、サクラエディタを使用する方法と「findstr」コマンドを使用する方法について紹介しました。
他にも「Windows 10にLinux仮想環境を構築してgrepコマンド自体を使えるようにする。」という方法もありますが、この投稿の対象をIT作業員用としていることから、どの現場でも使用できることを想定しています。
よってサクラエディタと「findstr」コマンドによる方法を取り上げました。

今回使用した「findstr」コマンドはwindows標準のコマンドですし、サクラエディタはWindows標準の機能ではないですが、ほとんどの現場で使用可能です。
例えば作業用に貸与されたパソコンに既に入っていたり、現場のファイルサーバ上に使用してよいフリーソフトとして格納されているので特定の現場でしか使えないということはまずないと思います。

以上です。
宜しくお願い致します。