Почему appcmd.exe ведет себя по-разному при выполнении внутри командного файла? - PullRequest
3 голосов
/ 08 сентября 2010

У меня есть следующее appcmd, чтобы добавить исключение к ограничениям IIS7 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

Кажется, проблема возникает из-за того, что я должен избежать кавычеквокруг первого параметра %s perl.exe.Но почему в пакетном файле это должно вести себя по-другому, это немного загадка.

Кто-нибудь может объяснить, почему это происходит?

1 Ответ

3 голосов
/ 08 сентября 2010

Проблема заключается в том, что командный процессор читает ваш "%s" %s и находит два знака %, что делает действительную пакетную переменную (а именно %" %). И после расширения этого в ничто, только ваш "s остается.

Вы можете избежать одиночного % -знака в вашем командном файле, удвоив его, например:

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