バッチファイルの色分けでNo.20844
xingsterit さん 06/02/08 14:46
 
最近、バッチファイルの強調キーワードを投稿したのですが、
%AAA%のような環境変数と
%%B のようにバッチのFor文を展開する変数とを色分けしたところ

%%B△%AAA%のような組合せではどちらも色分けされますが
%%B%AAA%のような組合せで両方を色分けすることができませんでした。
なんとなく理由は分かりますが、どうにか色分けすることは
できないでしょうか?


なお、環境変数XP以上で、コマンドプロンプトで
for /?  或いは call /?で説明されている全てのパターンに
(%~PATH:A,!a! , %aa:~1,0%など)
対応させましたが、どうしても%%B%AAA%のパターンに
色を付けられませんでした。

よろしくお願いします。
なお、明日から1週間出張ですぐにお返事できないかもしれません

[ ]
RE:20844 バッチファイルの色分けでNo.20845
秀丸担当 さん 06/02/08 15:01
 


例えば、正規表現ON,大文字小文字の区別OFF,単語の検索OFFで、

強調1
(?\1)[^%](%[a-z_]+%)
^(%[a-z_]+%)

強調2
%%[a-z_]+

でどうでしょうか。
少々強引ですが。

[ ]
RE:20845 バッチファイルの色分けでNo.20846
秀丸担当 さん 06/02/08 15:05
 

と思ったのですが強調1のほうは
(?<!%)(%[a-z_]+%)
のほうが良かったかもしれないです。

[ ]
RE:20844 バッチファイルの色分けでNo.20848
ENCODINGSHIFTJIS さん 06/02/08 15:58
 
>なんとなく理由は分かりますが、どうにか色分けすることは
この場合は %B% に先にマッチして、 AAA% が残る。

しかし、 %AAA%%%B のように3連
%ABC%%XYZ%%LNM% の2連
もありえますから、文字定数と同様に頭から読みきらないと
無理のような、気もします。

[ ]
RE:20848 バッチファイルの色分けでNo.20852
ENCODINGSHIFTJIS さん 06/02/09 09:45
 
%%[a-z]
%[a-z][a-z]+%

では、それらしくなりますか?
====================
 MHS(Monad)の強調定義はありませんか

[ ]
RE:20852 バッチファイルの色分けでNo.20915
xingsterit さん 06/02/16 02:22
 
以下の文字列をタイプした場合だと、本来強調されないはずの
agの部分が強調されてしまいます。

ENCODINGSHIFTJIS さんの方法は、変数名が1文字の環境変数には
対応できませんが、実際に1文字の環境変数なんてそうそう定義
しないため、実質的には問題無いように思えます。

もう少しねって修正したものをアップしたいと思います。

お二方ともありがとうございました。
また返信が遅れたことをお詫びします。

なお、MHSに関しては私は今のところ導入予定がありませんので
他の方が作るのが早そうです。

[ ]
RE:20852 バッチファイルの色分けでNo.20925
xingsterit1 さん 06/02/16 16:27
 
あれから、また少し考えました。
整理してみると、対応させたいのは、以下の3つの形式です。
・For のヘルプに出てくるもの全て
  %%i %%~dpi

・CALLのヘルプに出てくるもの全て
 %1 %~dp1(などの拡張書式全般)

・SETのヘルプに出てくるもの
 %AA% !AA! や !あああ! %AA:~1,2% %AA:~

----------------------------------------------------------------
 結局、秀丸担当さんの方法を取り入れて以下のようにしてみます。
上から順に、バッチ引数,For引数(特に強調2)、環境変数(特に強調1)
%{1}(~[fdpnxsatz]*)*(\$[Pp][Aa][Tt][Hh]:){0,1}[0-9]
%{2}(~[fdpnxsatz]*)*(\$[Pp][Aa][Tt][Hh]:){0,1}[a-zA-Z]
(?<!%)[%!][^%!|\\|\:|\=| |"]+(:~[0-9]*,{0,1}[0-9]*)*[%!]

としてみようかと思います。
(「特に強調〜」選ぶ理由は、現在ECHOの本文に色付けしているのですが、
 ファイル名中やECHO文中でも環境変数は強調されて欲しいからです
----------------------------------------------------------------
 ENCODINGSHIFTJIS さんの手も良さそうですが、
私が組んでいるバッチスクリプトを見ると、(FOR文中の「%%~dpI」は、末尾に¥を
含むため)
「%%~dpI%AAA%」という形式を強調できないと困ることが多そうです。
逆にバッチ側を「%%~dpI.\%AAA%」と記述し直した方が見易いと思いますが、既存の
資料を
読みやすくする方を優先したいと思います。

 また、%AAA%%BB%という風に環境変数を連続で並べる記述は、手持ちの中だと殆ど
ありません。
例えばディレクトリ名を環境変数に入れる場合、最後の\を含めずに%AAA%\%BBB%と書
く方が
見易いと思っています。

あと1日くらい間を置いて、もっと良い手がうかばなかったら、
このままBAT強調ファイルを更新しようと思います。
(一応、他にもECHO文回りを大分修正しました。

[ ]
RE:20852 バッチファイルの色分けでNo.20940
xingsterit1 さん 06/02/20 11:50
 
結局前方一致を利用して、全体を以下のように定義しました。

■SETで定義された環境変数の定義を以下のように定義しました。
(特に強調2)
 (?<=(%{2}(~[fdpnxsatz]*)*(\$[Pp][Aa][Tt][Hh]:){0,1}[a-zA-Z]))[%!][^~%!|\\|
\:|\=| |"\[\]]+(:~[0-9]*,{0,1}-{0,1}[0-9]*)*[%!]
 (?<=%{1}(~[fdpnxsatz]*)*(\$[Pp][Aa][Tt][Hh]:){0,1}[0-9])[%!][^~%!|\\|\:|\=
| |"\[\]]+[^%!|\\|\:|\=| |"\[\]]*(:~[0-9]*,{0,1}-{0,1}[0-9]*)*[%!]
 (?<!(^| |\t)%)[%!][^~%!|\\|\:|\=| |"\[\]]+[^%!|\\|\:|\=| |"\[\]]*(:~[0-9]*,
{0,1}-{0,1}[0-9]*)*[%!]
 (?<=(%{2}(~[fdpnxsatz]*)*(\$[Pp][Aa][Tt][Hh]:){0,1}[a-zA-Z]))[%!][^~%!|\\|
\:|\=| |"\[\]]+[^%!|\\|\:|\=| |"\[\]]*(:~[0-9]*,{0,1}-{0,1}[0-9]*)*[%!]

 ※ %~1 や%%~Iとごちゃごちゃになるので、敢えて「%~AAA%」 のようなチルダから
始まる環境変数の強調は捨てました

■FOR関連の環境変数を以下のように定義しました。
 %{2}(~[fdpnxsatz]*)*(\$[Pp][Aa][Tt][Hh]:){0,1}[a-zA-Z]
 (特に強調1)
■CALL関連(バッチ引数)の環境変数を以下のように定義しました。
 %{1}(~[fdpnxsatz]*)*(\$[Pp][Aa][Tt][Hh]:){0,1}[0-9]
 (特に強調1)

以下の記述は(特に強調1,特に強調2が別の色で)強調表示されます。
%~1
%~f1
%~d1
%~p1
%~n1
%~x1
%~s1
%~a1
%~t1
%~z1
%~$PATH:1
%~dp1
%~nx1
%~dp$PATH:1%aa%
%%~ftzI%aa%
%aa%%aa%%aa%
%dd%%a%
%aa%%aa%
%aa%%%~dpnI%%I
%aa%%aa%%%~dpI
%aa%%aa%
%%~dpI%aa%
%aaa%%あああ%
%あああ%%aaa%
%aa%%aa%
%%I%aa%
%aa%%%i
%aa%%aa%%bb%%~ftzaI
%~$PATH:1
%PATH:~-10%
%PATH:~0,-2%
%PATH:~1,0%
%PATH:~0,-2% ← SETのヘルプにあるマイナス表現に対応させるのを前回忘れていま
した。

[ ]