简体   繁体   中英

Why does appcmd.exe behave differently when executed inside a batch file?

I have the following appcmd to add an exception to IIS7's ISAPI and CGI restrictions. The exception I am adding should look like:

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

Here is the command line:

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

If execute this from the command line it does this correctly, however if I execute this inside a .cmd batch file the path gets mangled and ends up looking like:

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

The trouble seems arise because I have to escape the quotation marks around the first %s perl.exe parameter. But why this should behave differently in a batch file is a bit of a puzzle.

Can anyone explain why this is happening?

The problem is that the command processor reads your "%s" %s and finds two mathing % signs, so this makes a valid batch variable (namely %" % ). And after expanding that into nothing, only your "s remains.

You can escape a single % -sign in your batch file by doubling it, like this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM