ファイル名に%を使うと、バッチファイルにドロップしたとき、環境変数に展開される。
もし、ファイル名に%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