Pourquoi appcmd.exe se comporte différemment lorsqu’il est exécuté dans un fichier de commandes?

J’ai l’ appcmd suivant pour append une exception aux ressortingctions ISAPI et CGI d’IIS7. L’exception que j’ajoute devrait ressembler à ceci:

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

Voici la ligne de commande:

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

Si vous l’exécutez depuis la ligne de commande, il le fait correctement. Cependant, si je l’exécute dans un fichier de commandes .cmd , le chemin est déchiré et finit par ressembler à ceci:

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

Le problème semble se poser car je dois échapper aux guillemets autour du premier paramètre %s perl.exe. Mais pourquoi cela devrait se comporter différemment dans un fichier de commandes est un peu un casse-tête.

Quelqu’un peut-il expliquer pourquoi ceci est en train de se passer?

Le problème est que le processeur de commandes lit votre "%s" %s et trouve deux signes % , ce qui fait une variable de lot valide (à savoir %" % ).

Vous pouvez échapper à un seul signe % dans votre fichier de commandes en le doublant, comme ceci:

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