コマンドプロンプトでコマンド(アプリ)を引数付きで起動したとき、引数のダブルクオートがどう解釈されるかの実験
通常(ダブルクオートなし)
スペースなしの文字列をダブルクオート
ダブルクオートで囲ってもプログラム内では現れない。(mainのargvの話)
スペースありの文字列をダブルクオート
ダブルクオートで囲むと1つの引数として扱われる
スペースなしの文字列をシングルクオート
シングルクォートはダブルクオートとは違い引数に現れる。Windowsではシングルクォートは特別な文字列ではないようだ。
スペースありの文字列をシングルクオート
シングルクォートは特別な文字でないことがわかる。
ではプログラム内でダブルクオート文字列、例えば“abc”を受け取りたい場合はどうしたらいいだろうか。結論から言うと3つのダブルクオートでabcを囲めばいい。
3つのダブルクオートは以下のように解釈される。
- 開始ダブルクオート
- 終了ダブルクオート
- 終了ダブルクオート直後のダブルクオートは通常文字として扱われるダブルクオート
あるいは2つのダブルクオートで1つのダブルクオートと解釈される。
この形式はCランタイムとWin32APIのCommandLineToArgvWで扱い方が違うようなので、以下の場合には使えない。
プログラム内でabc=”xyz = 123″を受け取りたい場合。
\でエスケープできる。
引数を表示するアプリ
引数を解釈して表示してくれるアプリ、開発のときの確認用。あるいは長い引数をとるアプリのときプログラム内部でどう受け取られるかの確認用。CRTとCommandLineToArgvWと独自実装で表示する。
https://github.com/ambiesoft/argCheck/releases