勝手にしやがれ Part2.

【投稿時の注意】
パスワード入力:必須。投稿後の削除時は同じパスワードを使います。
投稿者入力:いまのところ任意。入力を省略すると「名無しさん」がデフォルトで表示されます
Eメール入力:いまのところ任意。
リンクの入力:本文中に http の文字列が含まれると投稿出来ません。URL を貼るときは h 抜きで ttp:// とするなど工夫してみて下さい

1 / 9 ページ 前へ→

【163】Re:RCP32 v2.18β4 不具合報告
 konno WEB  - 2008/11/01(土) 0:18 -

引用なし
パスワード
   ▼Siさん:
>私の Vz は FGALDC で配布されていた高橋版が最後で、こうやって後を継いで改良作業が継続されていたとは、申し訳ないことに知りませんでした。

いえいえ、私は勝手に改造しているだけでして、機能追加部分は手抜きが多いし、
バグがあっても修正するスキルも無いので、ご利用は自己責任でお願いします。

VZを卒業された方たちは過去など振り返らないので、うちのサイトを見ることも
ないんでしょうね。ちょっぴり感傷的になる・・・秋ですねぇ。(^^;

>有り難く頂戴致しました。すごいです。

DOCがまた超いいかげんで、申し訳ないです。少しずつでも、追記・手直し
していこうと思ってはいるんですが。(^^;

ところで、XPには、RCP.EXEというものが元々あるんですね。どうりで、
16ビット版のRCP.EXEが動かないわけだ。
・ツリー全体表示

【162】Re:RCP32 v2.18β4 不具合報告
 Si  - 2008/10/29(水) 23:57 -

引用なし
パスワード
   ▼konnoさん:
>ttp://homepage3.nifty.com/tamaneko/vz.htm#000001
>
>ここのk07r2が最新版ですので、よろしかったらお試しください。

私の Vz は FGALDC で配布されていた高橋版が最後で、こうやって後を継いで改良作業が継続されていたとは、申し訳ないことに知りませんでした。

有り難く頂戴致しました。すごいです。
・ツリー全体表示

【161】Re:ワイルドカードの展開規則
 文太  - 2008/10/27(月) 17:55 -

引用なし
パスワード
   としきさん

> おまけ。
> 参考というか、検証すればすぐわかる事なんですが。
> 今回、文太さん、「*」というワイルドカードについて調べています。
> が、「*.」というワイルドカード指定であれば、多分、もっと安定な結果が得ら
> れるのではないかと思います。

 「サービスだぞ」って、わざわざ教えてくれているのに反応がとろくてすいま
せん。「え? 不定ではないけど…」とか思ってたりして。あう、あう。はい、
「*」を「*.」にしましたところ、直観からずれると思われていた command.com,
cmd.exe, ssed, egsed, mbsed, onigsed, yagrep, gawk, mawk32, tosfind のす
べてにおいて「拡張子なし」のファイルだけにマッチさせられました。32ビッ
ト・ツールを使うときにはこれでいきます。っていっても、拡張子のないファイ
ルつくらないし、それだけを選んで処理するということは、現実的にはなさそう
ですけどね。
 ま、人生長いので、これから先どうなるかなんて分かりません。転ばぬ先の、
ですね。多謝。m(__)m
・ツリー全体表示

【160】Re:RCP32 v2.18β4 不具合報告
 konno WEB  - 2008/10/27(月) 0:53 -

引用なし
パスワード
   ▼Siさん:超亀レスですが

>高橋版で Lf+ にするとファイラーで LFN が表示されたような記憶があるのですが、SFN しか表示されません。これがちょっと気になります(勘違いかな?)。

高橋版はWin98系では問題無いのですが、XPなど、WinNT系では、LFNのチェック
ルーチンが変更されたためにフラグが立たず、LFN表示しなくなりました。
これを修正し、CPU負荷軽減対策などを追加した私家版が私のところにあります。
ttp://homepage3.nifty.com/tamaneko/vz.htm#000001

ここのk07r2が最新版ですので、よろしかったらお試しください。
・ツリー全体表示

【159】Re:32ビットコンソール
 文太  - 2008/10/26(日) 0:23 -

引用なし
パスワード
   Siさん、毎晩のように夜遅くまでつき合ってくださり、感謝しています。

>  いずれにしても Vz のようにコンソール参照だけでなく自前のコマンドライン
> 機能を内蔵していてそこでコマンドを実行できる訳ではなく、あくまで参照する
> だけです。
>  で、 XP 上でのソフト開発はエディタとコマンドロンプトの両方のウィンドウ
> を開いておいて、コマンドロンプト上で
> make >err.txt

 そうですかぁ。いえ、たとえ参照できても、コンソールファイルとしてその複
数行をブロック的に取り込み、クリップボードに送らなければならないのだから、
きっとQXのマクロが書けなければ手間がかかりすぎることになるな、とその後
思っていたのです。

 で、リダイレクトが必要なら、きっと多くの場合、Vzでもリダイレクトし、
そのファイルにコマンド文字列を後から先頭に付加する、というマクロと同じで
すね(そういうマクロを作って使っているわけです)。

> それなら Vz でも十分じゃない、とか突っ込まないで下さいね ^^;

 つっこまないですよ。プロないしプロ級な方がWindowsに着いていきたいと考える
のはごくごく健康的な発想で、また、ここまでVzやcommand.comやDos窓、16ビ
ット・テキスト処理ツールにコミットするほうが、やはり不健全だよねとは思って
いますので、突っ込みません。それでも、これ、完全な趣味なんだから、いいんじゃ
ない、といつのまにか諦念してしまっている自分がいるのをみて、それを受け入れる
ことにした、というだけなのです。

> なんだかあまり参考にならない話しですみません。
               「し」を^取りましょう。名詞と動詞では送りがなが
               違うのです。m(__)m↓_
 すいません、逆に安心してしまいました。そうそううまい話はないし(Vzer的に)、
やっぱ、WindowsはWindowsじゃねーか、とか思ってしまってます。m(__)m
・ツリー全体表示

【158】Re:32ビットコンソール
 Si  - 2008/10/25(土) 23:56 -

引用なし
パスワード
   ▼文太さん:
> 32ビット環境でコンソールの参照を可能にするにはどすればよいのでしょう?
>QXにその機能がありますか? 32ビットなエディタなら普通あるものなので
> しょうか?(以下略)

はい。QXには外部コマンドを登録して実行する機能があり(これはQXに限らないか・・・)、そのコマンド登録の設定で、「DOS出力を取り込み」を有効にすると「最大16キロバイトの画面出力を取り込めます。」(QXのヘルプより)

なんですが、実は「この機能は Windows 95,98 上でのみ使用できます。」(同じくQXのヘルプより)です。 XP では「DOS出力を取り込み」にチェックを入れられないようになっています。

ここのところ諸般の理由でQX以外のエディタをもっぱら使っていますが、そちらにも外部ツールの標準出力、標準エラーのアウトプットを画面参照する機能は付いています。

いずれにしても Vz のようにコンソール参照だけでなく自前のコマンドライン機能を内蔵していてそこでコマンドを実行できる訳ではなく、あくまで参照するだけです。

で、XP上でのソフト開発はエディタとコマンドロンプトの両方のウィンドウを開いておいて、コマンドロンプト上で

make >err.txt

を実行。err.txt をエディタで開いてエラー箇所へのタグジャンプとかやってます。

タグジャンプだけなら出力結果を参照出来るだけで良いのですが、無事にコンパイル出来れば動作確認で .exe を実行してみたりしなければならないので結局コマンドロンプトを開いておく方が勝手が良いのです。
それなら Vz でも十分じゃない、とか突っ込まないで下さいね ^^;

なんだかあまり参考にならない話しですみません。
・ツリー全体表示

【157】Re:ワイルドカードの展開規則
 文太  - 2008/10/25(土) 23:37 -

引用なし
パスワード
   としきさん

 正確なところのフォローありがとうございます。全体に納得のいく話でした。

>> Dos環境ではワイルドカードの展開がそれぞれのツールにまかされていると
>現実的には問題ないとは言え、実はこれは最大の問題だったりする。
>手持ちの処理系でコンパイルしなおしたら挙動
>が違う、なんて事はありそうな話。
 実際上は試しようもありませんが、十分あり得ますね、きっと。

> 「標準MS-DOSハンドブック」
 Dos3対応版を数日前から探しています。引っ越しで捨てたのかなぁ。ったく。

>> "*"はユーザープログラムまたはシステムコールによって"?"に展開しなければ
>> ならない
>これらから、以下は推測。
>仕様としては、「*」は「????????.」に展開されるべきであった。ところが、な
>ぜかシステムコールでは「????????.???」に展開されてしまっている。

 これはやる気があれば調べられるはずですが、 はい、「* は単純に ? 複数個
に展開されて処理されており」という記述は見ました。きっとそうでしょう。

> 今回、文太さん、「*」というワイルドカードについて調べています。
> が、「*.」というワイルドカード指定であれば、多分、もっと安定な結果が得ら
> れるのではないかと思います。

 はい、その後そう気づいておりました。「文太さん的にはこう考え・調べるべき」
アドバイスありがとうございます。Dosレベルで(昔から)「foo.」というファ
イル名が許されているので(さすがに、fooの存在するディレクトリで共存はできま
せんが)。ありがとうございました。m(__)m
・ツリー全体表示

【156】Re:ワイルドカードの展開規則
 としき WEB  - 2008/10/25(土) 22:50 -

引用なし
パスワード
   いくつか。

> Dos環境ではワイルドカードの展開がそれぞれのツールにまかされていると

現実的には問題ないとは言え、実はこれは最大の問題だったりする。
ソースが公開されているフリーウェアの場合、ものによっては、複数の処理系に
対応していたりするわけです。さらに、それぞれの処理系用のmakefileまで同梱
されていたりして。
そういう場合、DOSの時代の国産ソフトだと、たいがいはMS-C(or Quick C)とTurbo C(or Borland C)とLSI C-86ですが、配布されている実行ファイルをそのま
ま使っているうちはいいけれど、手持ちの処理系でコンパイルしなおしたら挙動
が違う、なんて事はありそうな話。


もう一つ、#136であった話ですが。

> 注意せよ。DOS本来のワイルドカード解釈では「*」は、ファイル名
> の本体および拡張子のそれぞれの中において、「*」以降の文字列照
> 合をしない、という意味を持っており(例えば「p*」は「pqr.c」に
> はマッチしない)

前段については、DOSの仕様として明記されている話のようです。
以下、NEC版MS-DOS5.0Aユーザーズリファレンスマニュアルより引用。

> アスタリスク(*)は、ファイル名の名前と拡張子の中で、それ以降が“1文
> 字以上の任意の文字列”を表すワイルドカードです。

ところで、手元には、ASCII出版局の「標準MS-DOSハンドブック」があります。
序文によると、この本は、さらに古いDOS2.0を対象に書かれています。なにせ、
84年が初版です。この本では、単純に

> "*"は、任意の複数文字とマッチします。

としか書かれていません。
ただ、この本の後ろの方には、重要な記述がありました。

> "*"はユーザープログラムまたはシステムコールによって"?"に展開しなければ
> ならない

これらから、以下は推測。
仕様としては、「*」は「????????.」に展開されるべきであった。ところが、な
ぜかシステムコールでは「????????.???」に展開されてしまっている。


おまけ。
参考というか、検証すればすぐわかる事なんですが。
今回、文太さん、「*」というワイルドカードについて調べています。
が、「*.」というワイルドカード指定であれば、多分、もっと安定な結果が得ら
れるのではないかと思います。
・ツリー全体表示

【155】32ビットコンソール
 文太  - 2008/10/25(土) 11:02 -

引用なし
パスワード
   Siさん

 気になっていたのですが…。

> コマンドプロンプトはソフト開発で利用する機会が多いのですが(なんて言って
> 長い間サボりっぱなしでしたが)、そうです、Vz 環境では 32bit コンパイラの
> 吐き出すメッセージをコンソールで参照出来ないのですね。で、結局テキストエ
> ディタも Win32 版のものを常用するようになってしまった訳で。 勘違いがなけ
> ればこんな背景だったかと。

 32ビット環境でコンソールの参照を可能にするにはどすればよいのでしょう?
QXにその機能がありますか? 32ビットなエディタなら普通あるものなので
しょうか? やはりcmd.exeその他の出力をリダイレクトして使うのには限界があり、
別窓でコピペしてクリップボード送りにすれば、Vz16ビット窓に持ってこれる
は持ってこれる(そこまでVzにこだわる? こだわってしまいますm(__)m)と前
から考えてはいたのですが。お教えいただけますでしょうか。m(__)m
・ツリー全体表示

【154】Re:ワイルドカードの展開規則
 文太  - 2008/10/25(土) 0:19 -

引用なし
パスワード
    しつこいですね。すいません。とりわけSiさんとすれば、wildのことを除けば、
おそらくすごく興味がある話題でもないでしょうし。m(__)m

 ただ、ふと思いついてしまったのです。
 いえ、sed, awk, perlのDos日本語版移植はすべてserowさんがされているわ
けで、それらが違うほうが変だな、と。
 (もっともserowさんの影響を受けないでグレップの開発もなかったみたいで
はありますが…。)

 Dos環境ではワイルドカードの展開がそれぞれのツールにまかされていると
すると(これが最大のニュース)、もう、必要な場面で、逐一やるしかないので
すが、基準があると何が特殊か分かると思い、これだけはやっておこうと思った
グレップたちです。(command.comが「特殊」に分類されてしまったりする…。)
 どうやら、新出さんが正しいですね。ま、その後のことはともかく、思いっき
り間違ったことを書く人のわけはないですから。ワイルドも正しいです!

-------------------------------------------------
C:\XYZ>Command.com /cType abc
aaa

C:\XYZ>Command.com /cType abc.txt
aa

C:\XYZ>cgrep -t "aa" *        #wildcardさえマッチすれば両方
abc 1:aaa            #グレップされる検索パターン

C:\XYZ>cgrep -t "aa" *.*
abc 1:aaa
abc.txt 1:aa

C:\XYZ>ygrep -t "aa" *
abc    1:aaa

C:\XYZ>ygrep -t "aa" *.*
abc    1:aaa
abc.txt    1:aa

C:\XYZ>izgrep -t "aa" *
ABC 1:aaa

C:\XYZ>izgrep -t "aa" *.*
ABC 1:aaa
ABC.TXT 1:aa

C:\XYZ>grep "aa" *
aaa

C:\XYZ>grep "aa" *.*
ABC:aaa
ABC.TXT:aa

C:\XYZ>Command.com /cDir \bin\grep
GREP   EXE   90959 94-06-02  18:50

C:\XYZ>cgrepb "aa" *        #Bruce.さん版
aaa

C:\XYZ>cgrepb "aa" *.*
abc:aaa
abc.txt:aa

C:\XYZ>yagrep "aa" *        #32bit grep (by Bruce.さん)
ABC:aaa                #きっとWin APIがwildcard展開を担当
ABC.TXT:aa

C:\XYZ>yagrep "aa" *.*
ABC:aaa
ABC.TXT:aa
-------------------------------------------------
・ツリー全体表示

【153】Re:ワイルドカードの展開規則
 文太  - 2008/10/24(金) 15:48 -

引用なし
パスワード
   Siさん、m(__)m

>  文太さんが熱心にやられているので簡単なファイル検索プログラムを書いてち
> ょっと試してみました。

 わざわざどうもありがとうございます。m(__)m

> >(例えば「p*」は「pqr.c」にはマッチしない)
> が再現しました。

 Siさんが推測されているように「処理系」依存なのでしょうね。それでも、上は
MS-DOS環境では、それほど古いことでも珍しいことでもないようです(正直言って、
「.」を区切り文字と認識するwild.(com|exe)の仕様のほうが分かりやすいと思う。
とりわけLFNに個人的にやっかいになることが少ないと。とはいえ、a.b.c.dなん
てファイル名を許すとなると、過去との互換性はぐちゃぐちゃになるでしょうね。)

------------------------------------------------
C:\XYZ>Command.com /cType abc      #拡張子なしが(1)
aaa

C:\XYZ>Command.com /cType abc.txt    #拡張子ありが(2)
aa

#GNU sed version 1.18 + multi-byte extension 1.03
C:\XYZ>sed "s/a/b/g" *         #(1) matched
bbb

C:\XYZ>sed "s/a/b/g" *.*        #(1)(2) both matched
bbb
bb

#serow版
C:\XYZ>oldsed "s/a/b/g" *        #(1) matched
bbb

C:\XYZ>oldsed "s/a/b/g" *.*       #(1)(2) both matched
bbb
bb

C:\XYZ>Jgawk "{gsub(/a/,\"b\");print}" *    #(1) matched
bbb

C:\XYZ>Jgawk "{gsub(/a/,\"b\");print}" *.*   #(1)(2) both matched
bbb
bb

C:\XYZ>Jperl4 -pe "s/a/b/g" *      #(1) matched
bbb

C:\XYZ>Jperl4 -pe "s/a/b/g" *.*     #(1)(2) both matched
bbb
bb
------------------------------------------------

 なんだか当たり前のことを検証しているような気がしてきた…。
 あるいは、僕が問題を途中で間違った方向に引っぱってしまったか…。
 command.com and cmd.exe@XPが、MS-DOS的観点からすると、やっぱ特殊
なんではないでしょうかねぇ。
 そしてSiさんが教えてくれたように、32ビットなWindowsAPIの世界では、
cmd.exe的解釈が標準であると。
 となると、やはり2つの世界に引き裂かれているcommand.comが一番ぐちゃ
ぐちゃであると。違うかな。いや、一般化しなければ、command.com@XPは、
彼(女)自身とても大変そうであるばかりでなく、使うのも大変だ、と。

 一番最初に戻ると新出さんが言うことには、けっこう一般妥当性がありそうだ。
とはいえ、(まただ)モバなMS-DOS6, command.comがあったなぁ…。あいつも
相当ぐちゃぐちゃしてたなぁ…。
・ツリー全体表示

【152】Re:ワイルドカードの展開規則
 文太  - 2008/10/23(木) 16:44 -

引用なし
パスワード
   >  「*x*」という指定の仕方は cmd.exe 固有だったと思う。

 いちおう訂正。「cmd.exe 固有」というより、Windows95のLFNサポート時
からだそうです。また、これに絡み、いちおう以下を追記しておきます。LFNの
エイリアス(SFN)でも当たるから注意してね、という話。そのディレクトリ
環境によっては、「長いファイル名.txt」が「長いフ~1.txt」になったりすること
がありますが、この「1」もヒットするからね、ということ。そして、「~1」は
Windowsが勝手につけるのでなおさら注意とのこと。(出典:天野司『WindowsDos
プロンプトポケット・リファレンス』、同『WindowsXP/2000コマンドプロンプト
ポケット・リファレンス』)
・ツリー全体表示

【151】Re:ワイルドカードの展開規則
 Si  - 2008/10/23(木) 1:21 -

引用なし
パスワード
   文太さんが熱心にやられているので簡単なファイル検索プログラムを書いてちょっと試してみました。

BC++5.02 で作成した 16bit 版の実行ファイルで XP上の "MS-DOSプロンプト"(CMD.EXE ではなく command.com を直接起動したもの)での実験結果では、
まさに、

>(例えば「p*」は「pqr.c」にはマッチしない)

が再現しました。

同じソースから作成した 32bit 版の実行ファイルではこのような挙動はなく、みなさんが書かれているような動作でした。

-----------------------

以下、既にご存じの部分もあるかも知れませんが・・・

1.Cコンパイラで作成した自作アプリの場合
コマンドライン引数に指定されたワイルドカードはそのままの文字列として実行ファイルに渡されます(註1)。
で、ワイルドカード(を含む文字列)を対象にした実際のファイル検索は、コンパイラ固有の関数(findfirst や _dos_findfirst)、あるいは WIN32API (FindFirstFile)を使って行われます。
ということは、引数に指定されたワイルドカードをアプリ側でどう扱うのか?はコンパイラ依存の部分もあるのではないと思うのです(きちんと検証した訳ではないのであくまで仮説です)。

(註1)LSI-C試食版の場合はちょっと違って、デフォルトの動作ではワイルドカードは展開された状態でアプリに渡されます。これを抑制するのには noexpand.obj をコンパイル時にリンクします。

2.OSの内部コマンド、付属外部コマンドの場合
おそらく 100% OSの仕様による、と言うところではないでしょうか(これもきちんと検証した訳ではありません)。
・ツリー全体表示

【150】ファイル末改行付加
 文太  - 2008/10/22(水) 21:18 -

引用なし
パスワード
    しつこいのですが。たぶんこれが最短。少なくともsedを使うなら。

-------------------
C:\XYZ>command.com /ctype abc
without \n
C:\XYZ>lsed "" abc   #logos版
without \n

C:\XYZ>oldsed "" abc  #serow版(たぶん他のsedでは駄目)
without \n       #bugともfeatureとも言える仕様です。

C:\XYZ>
-------------------
・ツリー全体表示

【149】Re:ワイルドカードの展開規則
 文太  - 2008/10/22(水) 11:01 -

引用なし
パスワード
    「*x*」という指定の仕方は cmd.exe 固有だったと思う。意味は、「ファイル
名の【どっかに】x を含むこと」だと思う。
 伝統的な command.com だと、「x*」なら「x」が生きるけど、「*x」では、
「*」によって「x」が殺されてしまい意味がなくなる、だったと思う。

 以下、例によってXP環境。

C:\XYZ>command.com /cdir *x*
ABC         0 08-10-18  16:31     #(1)「x」は死んでる
ABC   TXT     0 08-10-18  16:31     #(2)よってここで「x」がは
                        #生きてるように見えるかも
                        #しれないがそうではない
                        #だろう。
C:\XYZ>command.com /cdir *x*.*
ABC         0 08-10-18  16:31     #(3)間違いなく「x」は死ん
ABC   TXT     0 08-10-18  16:31     #でる。(4)もっと間違いなく
                        #「x」は死んでる

C:\XYZ>dir *x*                 #cmd.exe
2008 10 18 16:31         0 ABC.TXT   #(5)「x」が生きている
                        #ABCの方が出てこないから。
C:\XYZ>Wild -D "sed \"n\"" *x*
DEBUG MODE:sed "n" C:\XYZ\ABC          #えーと、これは読めません。
                        #いえ、読めました。
        #「*.*」と「*」の意味が違い、「.」が区切りとして機能する
        #場合、「*x*」は「*」の意味になり、「拡張子なしファイル」
        #=ベースファイルネームは何でもよい、となるのですね。
        #もちろん、「x」は死んでいる。

 結論:「*x*」で、cmd.exe と command.com と wild は【とても】違う。そも
そもそんな指定を許しているのは cmd だけで、それ以外は「.」の解釈が絡み、
錯綜する。ふつう使わないほうが混乱が少ないと思う。


 論理的読解で、辻褄を合わせるために「ずる」と抜け落ちがあるな、と実は思
っていますが、実用レベルではこんなところでどうでしょう? >誰か。
・ツリー全体表示

【148】Re:LOGSORTW ver1.25.2
 文太  - 2008/10/22(水) 10:58 -

引用なし
パスワード
   としきさん

------------------------------
C:\LSI>lcc ADDTAIL2.C
lld @link.i

C:\LSI>addtail2 <t1
with \n

C:\LSI>addtail2 <t2
without \n

------------------------------
 めでたしめでたし。
・ツリー全体表示

【147】Re:LOGSORTW ver1.25.2
 としき WEB  - 2008/10/21(火) 20:48 -

引用なし
パスワード
   > 少なくともEOFが原因ではないようです。

違います。私のソースコードの方が間違っている、ということです。
昨夜は眠かったので正しいソースコートが提示できませんでしたが、
元々のコード、EOFが来たらループから脱出、となっているのに、
脱出直後に、来たのが「EOFではない」特定のコードであったら、
という形になっています。これでは正しく動くわけがありません。
ということで、さらに修正版。

#include <stdio.h>
int main(){
int c,c2;
while((c=getchar())!=EOF){
putchar(c);
c2=c;
}
if(c2!='\n' && c2!=0x0d && c2!=0x0a)putchar('\n');
}

一応、今回もチェックしてOKである事の確認は取ったのですが、
前回もチェックOKを出したのに実はNGだったわけで。
また夢を見ているだけかもしれません。
・ツリー全体表示

【146】EOF?
 文太  - 2008/10/21(火) 14:26 -

引用なし
パスワード
   > まさか、EOF?
> while((c=getchar())!=EOF)putchar(c);

 もしかして、EOFがファイルにあることが前提なのかな?
 しかし、これって、1文字ゲットしては1文字出力し、ってやってるわけですか?
・ツリー全体表示

【145】Re:ワイルドカードの展開規則
 文太  - 2008/10/21(火) 14:04 -

引用なし
パスワード
    32ビットじゃないのを知ったのですが…。

C:\WORK>wild32 -D "sed \"n\"" A*.*
cmdline = sed \n\ C:\WORK\AAA
cmdline = sed \n\ C:\WORK\AAA.TXT

C:\WORK>wild32 -D "sed \"n\"" A*
cmdline = sed \n\ C:\WORK\AAA

 LFN対応wild.exeもwild.comに同じ。
・ツリー全体表示

【144】ワイルドカードの展開規則
 文太  - 2008/10/21(火) 14:00 -

引用なし
パスワード
    basefilename.extention の「.」が区切りとして機能するのか、と問題を整理
したつもりです。
 で、 unix-like tools の新出さんが言う「MS-DOS 本来の」ワイルドカード展
開規則に沿っているのは、command.com でも cmd.exe でもなく、wild.com(16
ビット)であるとの結論を得ました。合ってますでしょうかねぇ? もちろん、
現代において(?)ですけれど。

 (「?」は考えてません。 使わないもの。また。拡張子ありとなしを現実的に
使い分ける=同じディレクトリに入れることもあまりないと思うのですけれど…。
少なくとも僕の場合には。)


 結論:XPの command.com と cmd.exe の振舞いは同じで、「*」に関するか
ぎり両者とも「.」を区切りとしては認識しないようです。


 見て分かると思いますが、C:\WORKディレクトリには、
AAA
AAA.TXT
 の2つのファイルが入っています。

---------------------------------------------------
C:\WORK>command.com /cdir *.*
AAA         3 08-10-21  13:48
AAA   TXT     7 08-10-21  13:48

C:\WORK>command.com /cdir *
AAA         3 08-10-21  13:48
AAA   TXT     7 08-10-21  13:48

C:\WORK>wild -D "sed \"n\"" *        #commandは何でもよい。
DEBUG MODE:sed "n" C:\WORK\AAA

C:\WORK>wild -D "sed \"n\"" *.*
DEBUG MODE:sed "n" C:\WORK\AAA
DEBUG MODE:sed "n" C:\WORK\AAA.TXT

C:\WORK>command.com /cdir A*
AAA         3 08-10-21  13:48
AAA   TXT     7 08-10-21  13:48

C:\WORK>command.com /cdir A*.*
AAA         3 08-10-21  13:48
AAA   TXT     7 08-10-21  13:48

C:\WORK>wild -D "sed \"n\"" A*
DEBUG MODE:sed "n" C:\WORK\AAA

C:\WORK>wild -D "sed \"n\"" A*.*
DEBUG MODE:sed "n" C:\WORK\AAA
DEBUG MODE:sed "n" C:\WORK\AAA.TXT
---------------------------------------------------

 ※拡張子なしファイルを僕はほとんど作らないし、作らないようにしているの
  ですが、wild の「正しい」振舞いには、いつかはまる可能性もあったので、
  実験しておいて(忘れなければ)、いちおうよかったかな、と思う。


 ※もしかして、「.」がディレクトリに入れるようになったあたりから、この
  あたりの仕様変更があったのかもしれません。確かVzが拡張子付きディレ
  クトリに対応したのも 1.5 以降だったような…。c.mos さんがぶつぶつ言
  っていた記憶があります…。関係ないかな???


 というわけで(泥沼だぁ〜)、思いついたら実験。 新たに「aaa.aaa」なるサ
ブディレクトリを作ってみた。(cmd.exe はここでは大小文字を無視? うーん、
えーと、えー???)

C:\WORK>command.com /cdir a*
AAA         3 08-10-21  13:48
AAA   AAA <DIR>   08-10-21  14:17
AAA   TXT     7 08-10-21  13:48

C:\WORK>command.com /cdir a*.*
AAA         3 08-10-21  13:48
AAA   AAA <DIR>   08-10-21  14:17
AAA   TXT     7 08-10-21  13:48

 cmd.exe, command.comに違いなし。


 何かがわかったのだろうか? wildの挙動は確認できましたけれど…。

                        トホホ・マン・文太

 (あまり意味のない)追伸:「*.*」ってのを最初にワイルドカードとして覚
えた記憶があり(MS-DOS3.3D時代)、で「*.*」と「*」に違いがある・あった
のだろうというところから出発しました。
・ツリー全体表示

1 / 9 ページ 前へ→
ページ:  ┃  記事番号:
14,005
(SS)C-BOARD v3.8 is Free