hack のためのネタ帳, etc,,,

状況

Windows 版の Thunderbird では、バッチファイルにメールを Drag&Drop すると
Thunderbird が temp フォルダーに一時的に .eml ファイルを生成して、そのパスを渡してくれるので、
このパスを Cygwin の bash に投げて、bash script にて cygpath かけてから、
Ruby でヘッダを抽出することで、
メールヘッダの
Date, Subject, From, To, Cc
をコピペするようなスクリプトを書いてたんだけど、
たまに一時ファイルの名前が名が変なところで切れるなぁと思ってたら全角スペースが原因だった。

バッチファイルにファイルを Drag&Drop した場合、ファイル名に半角スペースが含まれているとダブルクオーテーションでクオートしてくれるのだが、全角スペースのみの場合はクオートしてくれない。

更に、バッチファイル側における %1 %2 ... へのコマンドライン引数の割り当ては、ダブルクオーテーションでクオートしてある場合は、スペースを含んでいても一つの引数になってくれる(ただし引数の前後にダブルクォーテーションが含まれてしまう)のだが、クオートされてない場合、全角スペースの箇所で引数が分割されてしまうという、地味に腐った挙動になっており、これが原因であることを発見した。

割と既知の問題らしく「cmd.exe 引数 全角スペース」でググると幾つも情報が得られる。
「=」「;」「,」でも分割されるとのこと。
これは、bash に %* で渡すという方法で何とかなりそうかなと思ったのだが、
問題なのは「&」
これ入ってると、パラメータではなくコマンドがそれ以降別のコマンドに分割されてしまうので、そもそも受け取れないという問題が orz

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます