Bien que les réponses donnent l'illusion que cela fonctionne, le fait est que vous ne pouvez pas insérer d'espaces dans les arguments cmd habituels. C'est facile à prouver :
-
Sauver " echo %1
" comme test.bat
. Ce fichier batch va sortir le premier argument que cmd nous passe.
-
Maintenant, essayez et exécutez test.bat
en fixant la valeur de %1
a foo bar
. (Notez qu'il y a un caractère d'espacement entre foo
y bar
.)
-
Essai-erreur pendant quelques années et se rendre compte que il n'y a aucun moyen de le faire . Les gens suggèrent de s'échapper en utilisant ^
pourtant test.bat foo^ bar
ne produira pas foo bar
.
Donc, il n'y a aucun moyen d'obtenir la sortie foo bar
et ce qui s'en rapproche le plus, c'est la course. test.bat foo" "bar
qui produit foo" "bar
ou en cours d'exécution test.bat "foo bar"
qui produit "foo bar"
.
Maintenant, la raison pour laquelle les autres réponses apparaître pour travailler, c'est parce que cd
hace il est propre une analyse syntaxique supplémentaire, s'écartant du comportement du passage d'argument habituel (l'analyse habituelle %1
, %2
, %3
etc. dans des fichiers batch typiques).
Par exemple, considérez le commandement particulier :
cd c:\documents and settings \some folder with spaces
Pourquoi cela fonctionne-t-il ? Cela est dû à cd
lui-même faire quelque chose qui équivaut à rejoindre les 7 habituel en un seul argument logique. Selon les normes de passage d'arguments de cmd, nous voyons 7 arguments :
c:\documents
and
settings
\some
folder
with
spaces
C'est comme si cd
a réuni les 7 arguments en un seul logique, en faisant quelque chose de similaire à array.join(" ")
ce qui produit le chemin :
c:\documents and settings \some folder with spaces
Notez que ce comportement est propre à cd
seulement (et quelques autres fonctions). Cela n'a rien à voir avec le passage habituel des arguments.
En effet, cd
a une autre particularité. Rappelez-vous que nous avons déclaré ci-dessus que nous ne pouvions pas obtenir la sortie foo bar
? La sortie la 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 même :
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
qui produit """"f"""o""""o"" ""ba"""r""""""""""
.
Tous les exemples ci-dessus ont une similarité, à savoir qu'ils produiront foo bar
après avoir coupé le "
chars. cd
L'auteur a dû s'en rendre compte aussi... si l'on en déduit que cd
Le comportement particulier de l'entreprise qui supprime tous les "
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