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 %1
sur foo bar
. (Notez qu'il y a un caractère d'espace entre foo
et 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^ bar
ne 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" "bar
qui produit foo" "bar
ou 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 cd
fait de son propre analyse supplémentaire, écartant du comportement de argument habituel en passant (l'habituel %1
, %2
, %3
et 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 cd
tous 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 à cd
seulement (et à certaines autres fonctions). Cela n'a rien à voir avec les arguments habituels.
En effet, cd
a 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" "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 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 bar
après élimination des "
caractères. cd
L'auteur doit avoir compris cela aussi ... si nous devions déduire de son cd
comportement 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