起動時のダブルクォートの扱いNo.37436
でるもんたいいじま さん 19/07/24 07:39
 
いつもお世話になっております、でるもんた・いいじまです。

さて、今ごろになって気付いたのですが、hidemaru.exe の起動時に渡す
ファイル名に「パスの途中にダブルクォートが混入している場合」の挙動が、
cmd.exe の組込コマンドやリダイレクトの扱いと違っています。

☆ ☆ ☆

具体的には、まずは cmd.exe の場合、
cd /d c:\
dir \prog
ここまで打って Tab を押すと当然、
dir "\Program Files"
と補完されます。そのまま下記のように書き足します。
dir "\Program Files"\hidemaru ←円記号以降がダブルクォートの外側
ここで Enter を押せばきちんとファイル一覧が出ますし、さらに
dir "\Program Files"\hidemaru\def
まで書き足して再度 Tab を打つと、当然のように
dir "\Program Files\Hidemaru\DEFAULT.KEY" ←ダブルクォートは末尾
となります。

☆ ☆ ☆

ところが、コマンドプロンプトから
"\Program Files\hidemaru\hidemaru.exe" "\Program Files"\hidemaru\newfile.txt
と打ち込んでEnterを押すと、秀丸が2つ立ち上がって、
  ・片方は、\Program Files\hidemaru\ からファイルを開くダイアログ
  ・もう一方は、\newfile.txt を新規作成する編集画面
が出てきます。

もちろん、コマンドプロンプトからフルパスで秀丸を起動することは少ない
でしょうが、PATHに秀丸のインストールパスを入れている人は結構いると
思いますし、あるいは
start hidemaru "\Program Files"\hidemaru\newfile.txt
と打つことも当然ありえます。

さらに、UNIX系のシェルでも、ダブルクォート・シングルクォートを
上記のような構文で使ってそのまま通ります。

☆ ☆ ☆

というわけで、何とかして上記のような構文を認識できるように
ならないでしょうか?
ルールとしては、「ファイル名が来るべき場面において、閉じ側の
ダブルクォートの直後の文字が空白類や\0でない場合、1回に限って
ダブルクォートを無視する」で行けそうな気がしますが、どうでしょう?

よろしくご検討ください。

[ ]
RE:37436 起動時のダブルクォートの扱いNo.37437
でるもんたいいじま さん 19/07/24 07:49
 
でるもんた・いいじまです。
すみません、些細なことですが訂正です。

> ところが、コマンドプロンプトから
> "\Program Files\hidemaru\hidemaru.exe" "\Program Files"\hidemaru\newfile.txt
> と打ち込んでEnterを押すと、秀丸が2つ立ち上がって、
>   ・片方は、\Program Files\hidemaru\ からファイルを開くダイアログ
>   ・もう一方は、\newfile.txt を新規作成する編集画面
> が出てきます。

このシチュエーション(「hidemaru\」までを手入力した場合)だと、
2つ立ち上がる秀丸の内容は
  ・\Program Files\ からファイルを開くダイアログ
  ・もう一方は「C:\\hidemaru へのカレントフォルダの移動に失敗しました。」
   のエラー
となります。

元記事のような結果になるのは、「hidemaru\」の途中でTabを使って補完していて、
"\Program Files\hidemaru\hidemaru.exe" "\Program Files\hidemaru"\newfile.txt
となった場合です。

失礼いたしました。

[ ]
RE:37437 起動時のダブルクォートの扱いNo.37438
秀丸担当 さん 19/07/24 08:56
 

ご指摘ありがとうございます。
確かに言われている通りになることが確認できました。
アプリによって動作はまちまちのようで、WordはできるけどExcelはできないなど、
統一された動作があるわけではないようです。
不都合が無ければ、できないよりかはできたほうがいいと思います。

Excelの場合は、空白を入れずに、
"c:\folder\a.csv"c:\folder\b.csv
と書いた場合、2つのファイルと認識されるようでした。
秀丸エディタもExcelの解釈と同じだと思います。(厳密にはわからないですが)
そういう書き方があるというより、間違いの自動的な訂正に相当すると思うので、考
え方によって違うのだと思います。
いままで気づかないところで間違った書き方をしたバッチファイルとかを使われてい
る方がいたとして、バージョンアップで動作が変わってしまったということにならな
いかが心配ではあります。

[ ]
RE:37438 起動時のダブルクォートの扱いNo.37439
秀丸担当 さん 19/07/24 13:51
 

今回のケースのように、途中の「"」の直後が「\」のときだけ、途中の「"」を無視
するようにしようと思います。それだと両立できて合理的だと思います。
どちらの挙動も仕様というわけではなく、念のための処理ということにしようと思い
ます。

[ ]
RE:37439 起動時のダブルクォートの扱いNo.37440
でるもんたいいじま さん 19/07/25 17:19
 
でるもんた・いいじまです。

> 今回のケースのように、途中の「"」の直後が「\」のときだけ、
> 途中の「"」を無視するようにしようと思います。
> それだと両立できて合理的だと思います。

ありがとうございます。
cmd.exeのタブ補完であればこれで大丈夫だと思います。
(PowerShellはまだ触ったことがありませんが…。)

> どちらの挙動も仕様というわけではなく、
> 念のための処理ということにしようと思います。

はい。

[ ]
RE:37439 起動時のダブルクォートの扱いNo.37459
でるもんたいいじま さん 19/08/05 18:25
 
でるもんた・いいじまです。

お返事が遅くなりましたが、最新版で希望通りの動作になっていることを
確認できました。いつもありがとうございます。

> 今回のケースのように、途中の「"」の直後が「\」のときだけ、
> 途中の「"」を無視するようにしようと思います。
> それだと両立できて合理的だと思います。

[ ]