Malgré les réponses qui donnent l’illusion que cela fonctionne, le fait est que vous ne pouvez pas vous faufiler dans les arguments habituels de cmd. C'est facile à prouver:
Enregistrer " echo %1" sous test.bat. Ce fichier de commandes affichera le premier argument que cmd nous transmet.
Maintenant, essayez et exécutez test.bat, en définissant la valeur %1sur foo bar. (Notez qu'il y a un caractère d'espace entre fooet bar.)
Essai-et-erreur pendant quelques années et se rendre compte qu'il n'y a aucun moyen de le faire . Les gens suggéreront d'échapper à l'aide ^, mais test.bat foo^ barne produiront 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 d'exécuter test.bat foo" "barqui produit foo" "barou d'exécuter test.bat "foo bar"qui produit "foo bar".
Maintenant, la raison pour laquelle les autres réponses semblent au travail parce que le cdfait de son propre analyse supplémentaire, écartant du comportement de argument habituel en passant (l'habituel %1, %2, %3et etc dans des fichiers batch typiques).
Par exemple, considérons la commande particulière:
cd c:\documents and settings \some folder with spaces
Pourquoi ça marche? Cela est dû à cd se faire quelque chose d' équivalent de rejoindre les 7 habituels arguments dans une logique. Selon les arguments de cmd qui passent les normes, nous voyons 7 arguments:
c:\documents
and
settings
\some
folder
with
spaces
C'est comme si cdtous les 7 arguments ont été réunis dans un argument logique, ce array.join(" ")qui donne le chemin suivant:
c:\documents and settings \some folder with spaces
Notez que ce comportement est propre à cdseulement (et à certaines autres fonctions). Cela n'a rien à voir avec les arguments habituels.
En effet, cda une autre particularité. Rappelez-vous que nous avons indiqué ci-dessus que nous ne pouvions pas obtenir la sortie foo bar? La sortie la plus proche que nous puissions obtenir est en exécutant:
test.bat foo" "bar
qui produit foo" "barou:
test.bat "foo bar"
qui produit "foo bar"ou:
test.bat "foo "bar
qui produit "foo "barou:
test.bat foo" bar"
qui produit foo" bar"ou:
test.bat "foo b"ar
qui produit "foo b"arou:
test.bat fo"o bar"
qui produit fo"o bar"ou:
test.bat fo"o ba"r
qui produit fo"o ba"rou:
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 même:
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 baraprès élimination des "caractères. cdL'auteur doit avoir compris cela aussi ... si nous devions déduire de son cdcomportement particulier qui élimine tout "ce 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