2017年9月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
無料ブログはココログ

« FORコマンドで、エクスプローラで選択したファイル群を処理する。 | トップページ | CALLコマンドと%%で遅延展開を代替する。 »

2006年11月 6日 (月)

コマンドラインで、%のエスケープ方法

バッチファイルでは、%は、%%でエスケープされる。
%~%は、環境変数がなくても置換される。
もし、環境変数がなければ、空と置換されて、%~%が消える。

コマンドプロンプトでは、簡単なエスケープ方法はない。
環境変数がなければ置換されずに、そのまま残る。
これを利用してエスケープする。

コマンドプロンプトで、%をエスケープするには、%の直後に^や継続行を入れる。

ECHO %^CD%

ECHO %^(改行)
More ? CD%

は、

%CD%

と出る。

前者は^CDという環境変数がないことを利用している。当然、

SET "^CD=bbb"

のようにして、^CDという環境変数があると置換される。

引用符("~")内では、%はエスケープされないが、^はエスケープされることに注意。

ECHO "%^CD%"

は、

"%^CD%"

と出る。

ただし、引用符の前に^を付けると、^"~^"内の^はエスケープされません。
^だけでなく、&|)などもエスケープされません。

ECHO ^"%^CD%"

は、

"%CD%"

と出ます。

コマンドプロンプトで、URLの%などエスケープするには、%の直後にタブや^を入れる。

Start IExplore.exe http://....%(タブ)8c%(タブ)9f...
Start IExplore.exe http://....%^8c%^9f...

URLやHTMLでは、タブが無視されること利用する。

引用符("~")内では、^はエスケープされることに注意。

(○)Start IExplore.exe "http://....%(タブ)8c%(タブ)9f..."
(×)Start IExplore.exe "http://....%^8c%^9f..."

前者は通るが、後者は^はそのまま渡るので駄目。

(○)Start IExplore.exe ^"http://....%^8c%^9f...^"

とすればOK。

« FORコマンドで、エクスプローラで選択したファイル群を処理する。 | トップページ | CALLコマンドと%%で遅延展開を代替する。 »