Thursday, February 3, 2011

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?

  • Windows batch variables should be prefixed with an %, making these %%s

    Kev : That fixes the batch file execution but breaks if executed from the command line. If run from command line I get `c:\perl\bin\perl.exe "%%s" %%s` which breaks the ISAPI restriction because IIS expects `c:\perl\bin\perl.exe "%s" %s`. But because I'm solving this for task automation I can live with that. I'm guessing this has something to do with differences in the way that the command line processor handles variable expansion. Thanks for the speedy answer though.
    From Grizly

0 comments:

Post a Comment