Windows 为什么在批处理文件中执行appcmd.exe时表现不同?

Windows 为什么在批处理文件中执行appcmd.exe时表现不同?,windows,scripting,iis-7,batch-file,iis-7.5,Windows,Scripting,Iis 7,Batch File,Iis 7.5,我使用以下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批

我使用以下
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参数周围的引号。但是,为什么在批处理文件中会有不同的行为,这有点令人费解


有人能解释为什么会发生这种情况吗?

问题是,命令处理器读取您的
%s”%s
,并找到两个匹配的
%
符号,因此这会生成一个有效的批处理变量(即
%“%
)。在将其扩展为零后,只剩下您的
“s

您可以将批处理文件中的单个
%
-签名加倍,如下所示:

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

因为这一次,我在SF和SO之间左右为难。谢谢弗兰克。这让我挠头很久了。