**********************************************************************
*XDIG:ディレクトリー操作援助ツール
**********************************************************************

[概要]

   grepで全サブディレクトリーをサーチしたい等、
   コマンド(.EXE,スクリプト(.CMD/.BAT)ファイル)を指定のディレクトリー内の
   全てのサブディレクトリーあるいはファイルに適用するツールです。
   リダイレクト機能を利用して出力結果を一つのファイルに集積することが
   できます。リダイレクト機能は単独でも使用できるのでDOS等 標準エラー出力の
   リダイレクト機能のないOSではエラー情報を標準エラーに書き出すツールなどを
   使用する時に有効です。

[使用方法]

    [ ] 内のパラメータは省略可能です

XDIG [directory]  [file-mask]  [dir-mask] [/options]  //cmd-string

    -directory  :コマンド文字列を適用するディレクトリー
                 リダイレクト機能のみを利用するときには不要.
    -file-mask  :ファイル名の選択マスク
                 指定がなければ *.*
                 directory と \ で連結指定もOK
    -dir-mask   :サブディレクトー名の選択マスク
                 指定がなければ *.*
    -cmd-string :コマンドとそのパラメータを指定する。
                 //の後はすべてコマンドの一部とみなされます。
                 XDIGへのパラメータはこれより前に指定して下さい。
                 例.  //grep search-word *.c
                 一文字目に@があるとファイル指定とみなす.
                 ファイルの一行目をコマンド文字列として実行します
                 コマンドファイル指定より後にパラメータを指定できません
                 例.  //@cmdfile

"                コマンド文字列内にディレクトリー名、ファイル名を取り込む
                 ことができます。
                  %f% :ファイル名,  %d% :経路名, %fp%:フルパス名。
                 (/Pdのとき %f% はディレクトリー名に置換されます)
                 例.  //lc %f%
        (注)% の扱いが BAT ファイル中とコマンドライン入力では異なります
             BAT ファイルでは %%f%% のようにしてシェルによる変換を避る
             必要があります。ただしWindows95ではコマンドライン入力も
             変換を受けるようです

    -options    :(大文字/小文字の区別はありません)
       /1file   :標準出力の出力先変更(/12 とすると標準エラー出力へ)
       /2file   :標準エラー出力の出力先変更(/21 とすると標準出力へ)
#ifdef UNX
#else  //!UNX
       /Aattr   :ファイル属性による選択マスク指定
                 attr=S,H,D(省略値は SH),'+'/'-'を前付けできる
                 例. /Asd,  /A-s
#endif //!UNX
       /Llevel  :実行をとどめるディレクトリーの深さ.0が開始ディレクトリー.
       /O[-]ord :一つのディレクトリー内でコマンドを適用するファイルの順序.
                 N:名前, E:拡張子, D:日付, S:サイズ, 0:配置順(省略値は'N')
                 0以外で - を付けると逆順。
       /Papply  :コマンド適用タイプ(省略値は'f')
                 apply=f:ファイル, d:ディレクトリー, b:両方,
                 n:リダイレトのみの使用
       /Ysw,/Nsw:一文字指定のオン/オフ タイプスィッチオプション
                 sw に以下の文字を指定する,( )は省略値
#ifdef UNX
#else  //!UNX
              c :(Confirm)コマンドを実行する前に確認を取る(/Nc)
#endif //!UNX
#ifdef UNX
"             d :パイプ、ソオケット、デバイス等、特殊ファイルにも適用。(/Nd)
#endif //!UNX
              e :(Empty)ディレクトリーが空のときもにコマンドを実行する(/Ne)
              h :(cHange dir)各サブディレクトリーに現行ディレクトリーを
                 設定しつつコマンドを実行する(/Yh)
              n :(Null)%f%,%fp%にデータが無い時それをNULLに置換する(/Nn)
                 例えば /Pd 指定の時,/Ye指定でディレクトリーが空のときが
                 そうです。
#ifdef UNX
              k :シンボリックリンクも処理する(/Yh)
              m :シンボリックリンクエラーMsgを出力するか。(/Ym)
#endif
              t :(Trace)サブディレクトリー名と実行コマンドを標準出力に
                 書き出す(/Yt)
              x :(eXe)コマンドを exe ファイルとして実行。(/Nx)
                 (コマンドに不当なエクステンション名のファイル指定の時。)

[例]

 -全サブディレクトリーに対するコマンド実行
  XDIG dirabc /21 /pd //grep "srch-word" %d%

 -ディレクトリー内全ファイルに対するコマンド実行,コマンドファイルによる指定
  XDIG dirabc *.c  //@foo

 -リダイレクション機能のみの利用
  XDIG /2wkf //getstder parm1

[変更履歴]
  v1.4 (98/11/03)
       -トレースメッセージにファイル名を表示
       -(BUG) /L パラメータ(実行停止ディレクトリー階層レベル)の取扱いの誤り
  v1.5 (99/11/12)
       -(BUG)/Pdのとき%fp%が置換されない.
  v1.6 (00/09/30)
       -Linux support.
  v1.7 (03/02/10)
       -(UNX)Symbolic link に対する考慮。特殊ファイル対応。
  v1.8 (06/08/29)
       -%fb%:ベース名 指定サポート。