[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[connect24h:10678] Re: WIN にて古いファイルを削除



佐名木という者です。

おっ、はせがわさんだ!

↓のような話は、いつもいつも大変参考になります!

HASEGAWA Yosuke  wrote on 2006-3/30(木) 11:32:6
>Windows におけるコマンドライン引数の機能は、渡す側 つまり
>CreateProcess においても、受け取る側の GetCommandLine に
>おいても、ただ単純に単一の文字列のみとなっています。
>ダブルクォートが入っていた場合にどのように扱われるかは、
>例えば C であればランタイムライブラリ(CRT)やスタートアップ
>ルーチンの実装によって異なります。これは C の処理系によって
>異なり、CMD.EXE とは関係ありません。
>例えば、MS-DOSな話になりますが、LSI C-86 などであれば、
>^ や ' などによるクォートもサポートしています。

という事は、CSCRIPT.exe は VC でコンパイルされていないのかな!?
先ほどのメールであったように、挙動が argv.exe(VC++でコンパイル)
と異なってました。
また、argv.exe と cmd.exe は挙動が似ていたので CMD.exe も VC で
コンパイルされたのかな?
一方で BorlandC でコンパイルした結果も異なるという可能性があるので、
どんな挙動を示すか、ちょっと楽しみ(意味不明)ですね。

>> 一方で UNIX 系も csh 系と sh 系で微妙に挙動が異なりますね♪
>> (なんのために調べ上げたんだろう、おいら ^^)
>
>UNIX では exec(2) にて、各プログラムに複数の引数を配列として
>引き渡す機構がOSとして準備されています。
>ですので、あとはユーザがコマンドラインから入力した1行分の文字列を
>どのように解釈して配列に展開するかはシェルの実装にかかってきます。

ちょっとずつ微妙に異なっているのはそのためですか。なるほど!

>以下余談。
>C の argc/argv をはじめ、古い言語のコマンドライン引数の取得は
>ANSIコードページベースで行われるため、Unicode なファイル名を
>引数として与えてやると簡単に破綻します。
>http://pcweb.mycom.co.jp/articles/2005/11/07/blackhat/
>
>特に、コードページ1252のようにUnicodeからの変換により " に置き
>換わる文字が存在する環境では、さらにやらしいことが起こるかも
>知れません。

その通りですね。
あえて unicode のエスケープ回避テクニックは話題にはしませんでしたが...
本質(Windowsのコマンドラインの引数のエスケープは複雑で、Windowsアプリ
ケーションプログラマが行うはちと難儀)が見えにくくなるので。

UNICODE は私もどっかに PDF でレポートがあります。(へへっ宣伝(*^_^*))

P.S.
あれから更に....
・ActivePerl 5.8.7 build 813 for Win32
・PHP5.1.1 for Win32
は、argv.exe のような挙動をするようですので、

Windows な Perl/PHP プログラマの方は、
・ヘルプにあるように基本的に「^」でエスケープができるが...
・「 (半角スペース)」を見つけたら(その一つの引数を)全体を「"」
  で囲む。
・「"」を見つけたら「\"」でエスケープ
・「\」はエスケープしなくてもいいが...
  「"」の直前にある「\」だけは「\\」にエスケープする
ってルールで適切にエスケープできるでしょう...多分ね。

以上、よろしくお願いします

2006-3/30(木) 11:45:39 作成開始

 -----------------------------------------------------
 佐名木 智貴(Tomoki Sanaki) 
    E-mail=active@xxxxxxxxxxxxxxxxxx
 PGP FingerPrint 
 = 34E5 2A31 45C8 2CB5 3CED  0B46 F328 A402 7182 DCC6

--[PR]------------------------------------------------------------------
  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 ┏━┫ ◆・◇MMミッドスクエア・ザタワーレジデンス◆・◇ ┣━┓
 ┃◆┗┳━━━━━━━━━━━━━━━━━━━━━━━━━┳┛◆┃
 ┗━━┛みなとみらい駅徒歩1分。免震タワーマンションが誕生 ┗━━┛
          http://ad.freeml.com/cgi-bin/ad.cgi?id=dTMjR
------------------------------------------------------------------[PR]--
■GMO INTERNET GROUP■ GMO INTERNET www.gmo.jp