2017年11月
      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    
無料ブログはココログ

« ファイル名に&を使うときは、半角空白も併せて使うべし。(その2) | トップページ | ファイル名に!を使うと、環境変数の遅延展開と相性が悪い。 »

2009年2月23日 (月)

ファイル名に%を使うと、バッチファイルにドロップしたとき、環境変数に展開される。

もし、ファイル名に%cd%や%temp%などの環境変数似の文字列があると、バッチファイルにドロップしたときに、環境変数に展開されちゃいます。
これは、"~"では、エスケープできません。

これを回避するには、バッチ変数(%1など)を使わないことです。
じゃ、どうやってファイル名を受け取るのかって?
バッチ変数の代わりにCMDCMDLINEを参照します。

SET ARG=%CMDCMDLINE:*" =%
SET ARG=%ARG:~0,-1%
ECHO;%ARG%
PAUSE

あるいは、CMDCMDLINEからバッチ変数に代入し直します。

SETLOCAL ENABLEDELAYEDEXPANSION
SET ARG=!CMDCMDLINE:*" =!
SET ARG=!ARG:~0,-1!
CALL :MAIN !ARG:%%=%%%%!
GOTO :EOF
:MAIN
REM 元のバッチファイルをここに置く
ECHO;%*
PAUSE

« ファイル名に&を使うときは、半角空白も併せて使うべし。(その2) | トップページ | ファイル名に!を使うと、環境変数の遅延展開と相性が悪い。 »