appcmd.exe がバッチ ファイル内で実行されると動作が異なるのはなぜですか?

appcmd.exe がバッチ ファイル内で実行されると動作が異なるのはなぜですか?

appcmdIIS7 の ISAPI および CGI 制限に例外を追加するには、次の操作を行います。追加する例外は次のようになります。

c:\perl\bin\perl.exe "%s" %s

コマンドラインは次のとおりです。

appcmd set config -section:isapiCgiRestriction "-+[path='c:\perl\bin\perl.exe \"%s\" %s', allowed='true', description='Perl CGI']"

これをコマンドラインから実行すると正しく実行されますが、.cmdバッチファイル内で実行するとパスが壊れて次のようになります。

c:\perl\bin\perl.exe "s

問題は、最初の%sperl.exe パラメータを囲む引用符をエスケープする必要があるために発生するようです。しかし、バッチ ファイルでこれが異なる動作をするのはなぜか、少し謎です。

なぜこのようなことが起こるのか誰か説明できますか?

答え1

Windowsのバッチ変数には%、という接頭辞を付ける必要があります。%%s

関連情報