|
Siさん、すいませんでした。
頭悪いなぁ>文太
僕はモバイル・ギアという純Dos機を持っていて、すぐに試験できたはずだ
ったのでした。どうもトンチンカンなレスをしまして申し訳ありませんでした。
事情は複雑ではありましたが、すぐ実験してみることを思いつくべきでした。
XPの command.com の支配下にあるといっても、やはり裏では cmd.exe が監視
しています。 ですから、「^」消失の件は、cmd.exe の要求を満たすエスケープ
の仕方しかありませんでした。(C:\>^ だけだと、反応が違うのですが)
まず、
C:\>command.com /cdir c:\bin\wild.com
WILD COM 12396 98-06-12 1:34
C:\>command.com /cdir c:\bin\wildl.exe
WILDL EXE 16893 99-02-04 1:50 (リネームしてあります)
の2つが対象です。
色んなところの色んなマシンで使うので、リネームして両方(RCP.exeとRCP32.
exeのように)HDの\binディレクトリに入れています。
まず、wild.comから。
【@XP】
C:\>Wild.com -D "Ygrep \"^^foo$\" $f >>c:\kek" c:\xyz\*.*
<< 環境変数対応 Wildcard 展開プログラム Ver.1.34 >>
Copyright (c) 1996-98 by namazu & Si
DEBUG MODE:Ygrep "^foo$" c:\xyz\TEST1.TXT >>c:\kek
DEBUG MODE:Ygrep "^foo$" c:\xyz\TEST2.TXT >>c:\kek
【@dos 6.2】
A:\>Wild.com -D "Ygrep \"^foo$\" $f >>a:\kek" a:\xyz\*.*
<< 環境変数対応 Wildcard 展開プログラム Ver.1.34 >>
Copyright (c) 1996-98 by namazu & Si
DEBUG MODE:Ygrep "^foo$" c:\xyz\TEST1.TXT >>c:\kek
DEBUG MODE:Ygrep "^foo$" c:\xyz\TEST2.TXT >>c:\kek
★wild.comには不具合なし。
次は、wildl.exe。と、ところが、何、これ?
【@XP】
C:\>Wildl -D "Ygrep \"^^foo$\" $f >>c:\kek" c:\xyz\*.*
アクセスが拒否されました.
よく分からないけど、しょうがないから、Vzファイラでwild32にリネーム。
す、すると。(もちろん同じ実行ファイルです。)
C:\>Wild32 -D "Ygrep \"^^foo$\" $f >>c:\kek" c:\xyz\*.*
cmdline = Ygrep \foo$\ C:\XYZ\TEST1.TXT >>c:\kek
cmdline = Ygrep \foo$\ C:\XYZ\TEST2.TXT >>c:\kek
通りました。ワケワカですが、
Siさんがおっしゃるように、まずいですね。「\」が残り「"^^」が消失。
C:\>Wild32 -D "Ygrep \"^^^^foo$\" $f >>c:\kek" c:\xyz\*.*
cmdline = Ygrep \^foo$\ C:\XYZ\TEST1.TXT >>c:\kek
cmdline = Ygrep \^foo$\ C:\XYZ\TEST2.TXT >>c:\kek
進歩。しかし「\」が残り、「"」が消えてる。
C:\>Wild32 -D "Ygrep "^^^^foo$" $f >>c:\kek" c:\xyz\*.*
cmdline = Ygrep ^foo$ C:\XYZ\TEST1.TXT >>c:\kek
cmdline = Ygrep ^foo$ C:\XYZ\TEST2.TXT >>c:\kek
おお、この場合は、たぶん、「"」がなくとも、ygrepは次の引数をパターンと
認識してくれそう…。でも、辛いですよね。
では、純Dos。
【@dos 6.2】
A:\>Wildl -D "Ygrep \"^foo$\" $f >>a:\kek" a:\xyz\*.* (wildlで通るけど、すぐ
cmdline = Ygrep \foo$\ A:\XYZ\TEST1.TXT >>a:\kek リネームします)
cmdline = Ygrep \foo$\ A:\XYZ\TEST2.TXT >>a:\kek
「"」の「\」によるエスケープが認識されず、「"^」が消失し、「\」が残る。
A:\>Wildl -D "Ygrep "^foo$" $f >>a:\kek" a:\xyz\*.*
cmdline = Ygrep foo$ A:\XYZ\TEST1.TXT >>a:\kek
cmdline = Ygrep foo$ A:\XYZ\TEST2.TXT >>a:\kek
「"」が消失し、「^」も消える。「^」がcommand.comにとっての特殊文字って
ことはないですよねぇ? ま、試しに。
A:\>Wildl -D "Ygrep "^^foo$" $f >>a:\kek" a:\xyz\*.*
cmdline = Ygrep ^foo$ A:\XYZ\TEST1.TXT >>a:\kek
cmdline = Ygrep ^foo$ A:\XYZ\TEST2.TXT >>a:\kek
おお、「^」が「^」でエスケープできた。とはいえ「\」は消失。
というわけで、Si さんがすでにお気づきのように、wild.com にはバグがあり
ません。wild.exe には、ありそうですね。
でも、僕は、wild.com で十分なので、cmd.exe にいじめられないように「^^」
とか「^^^^」とかやります。デバッグ・モードがあって、よかった、よかった。
m(__)m
LFNは自分では作らないようにしていますが、それでもおつき合いしなけれ
ばならない時代です。ですので、LFN対応(NT・XP対応)の wild.exe も、
いつの日にか、宜しくお願いしますね。
あ、ご存じかと思いますが、XPでは、SFNとLFNの関係が異常です(ま、
と言っては大袈裟かな)。そのディレクトリの状況によって、SFNのbasefilename
自体が書き換えられてしまいます。 LFNが基本になっている世界なんですね。涙。
それでも、wild.exe については、僕は wild.com で十分に対応できますので、
まったく急いでおりません。dir コマンドと sed で、膨大な ren コマンド羅列
のバッチを書いてSFNに強引に書き換えてしまえばなんとかなりますし。そう
いうときにこそ、wild に登場してもらいたいのですけどね。
wild.comについては、cmd.exeの要求を満たせば、大丈夫でした。ありがとうご
ざいます。また、バグ入りバグ・レポート、申し訳ありませんでした。
|
|