Malgré les réponses qui donnent l'illusion que ça marche, le fait est qu'on ne peut pas se faufiler dans les espaces pour trouver les arguments habituels des cmd. C'est facile à prouver :
Enregistrez “echo %1” sous le nom de test.bat. Ce fichier batch produira le premier argument que le cmd nous passera.
Maintenant, essayez de lancer test.bat, en fixant la valeur de %1 à foo bar. (Notez qu'il y a un espace entre foo et bar.)
Faites des essais et des erreurs pendant quelques années et réalisez que il n'y a pas moyen de le faire. Les gens vont suggérer de s'échapper en utilisant ^, mais test.bat foo^ bar ne produira pas foo bar.
Donc, il n'y a aucun moyen d'obtenir la sortie foo bar, et le plus proche que nous puissions obtenir est de faire fonctionner test.bat foo" "bar qui produit foo" "bar, ou de faire fonctionner test.bat "foo bar" qui produit "foo bar". Maintenant, la raison pour laquelle les autres réponses apparaissent fonctionner est que cd fait sa propre analyse additionnelle, divergeant du comportement des passages d'arguments habituels (les %1, %2, %3 et etc. dans les fichiers batch typiques).
Par exemple, considérons la commande particulière :
cd c:\documents and settings \some folder with spaces
Pourquoi fonctionne-t-elle ? Cela est dû au fait que cd self fait quelque chose d'équivalent à la réunion des 7 arguments usuels en un seul logique. Selon les normes de passage des arguments du cmd, nous voyons 7 arguments :
c:\documents
and
settings
\some
folder
with
spaces
C'est comme si cd avait réuni les 7 arguments en un seul, faisant quelque chose de semblable à array.join(" "), qui produit le chemin :
c:\documents and settings \some folder with spaces
Notez que ce comportement est spécifique à cd seulement (et à quelques autres fonctions). Il n'a rien à voir avec le passage habituel des arguments.
En effet, cd a une autre particularité. Rappelez-vous que nous avons dit plus haut que nous ne pouvions pas obtenir la sortie foo bar ? Le résultat le plus proche que nous pouvons obtenir est en exécutant :
test.bat foo" "bar
qui produit foo" "bar, ou :
test.bat "foo bar"
qui produit "foo bar", ou :
test.bat "foo "bar
qui produit "foo "bar, ou :
test.bat foo" bar"
qui produit foo" bar", ou :
test.bat "foo b"ar
qui produit "foo b"ar, ou :
test.bat fo"o bar"
qui produit fo"o bar", ou :
test.bat fo"o ba"r
qui produit fo"o ba"r, ou :
test.bat "fo"o" bar"
qui produit "fo"o" bar", ou :
test.bat "f""o""o"" ""b""a""r":
qui produit "f""o""o"" ""b""a""r", ou encore :
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
qui produit """"f"""o""""o"" ""ba"""r"""""""""". Tous les exemples ci-dessus présentent une similitude, à savoir qu'ils produiront foo bar après que nous ayons supprimé les caractères ". L'auteur de cd a dû s'en rendre compte lui aussi… si nous devions déduire du comportement particulier de cd qui trippe tous les " qu'il reçoit , permettant à toutes ces commandes de fonctionner :
cd c:\documents and settings
cd "c:\documents and settings"
cd "c:"\"documents and settings"
cd c:\"documents" "and" "settings"
cd c:\"docu"ments an"d set"tings"
cd c:"\"docu"ments an"d set"ti"""ngs
cd "c"":""\"docu"ments an"d set"ti"""ngs
cd "c"":""\"do""cu"me"nts a"n""d set"ti"""ngs
cd c"""":""""\"""d"""oc""""u"me"""""nt"s a"n""d set"""""""ti""""ngs
&007