Trotz der Antworten, die den Eindruck erwecken, dass es funktioniert, können Sie sich nicht in Leerzeichen in die üblichen cmd-Argumente einschleichen. Das ist leicht zu beweisen:
Speichern Sie " echo %1
" als test.bat
. Diese Batch-Datei gibt das erste Argument aus, das uns cmd übergibt.
Versuchen Sie nun auszuführen test.bat
und setzen Sie den Wert %1
auf foo bar
. (Beachten Sie, dass zwischen foo
und ein Leerzeichen steht bar
.)
Probieren Sie es ein paar Jahre lang aus und stellen Sie fest, dass es keine Möglichkeit gibt, dies zu tun . Die Leute schlagen vor, mit zu fliehen ^
, test.bat foo^ bar
werden aber nicht ausgegeben foo bar
.
Es gibt also keine Möglichkeit, die Ausgabe zu erhalten foo bar
, und die nächstmögliche Möglichkeit besteht darin, auszuführen , test.bat foo" "bar
was produziert foo" "bar
, oder auszuführen, test.bat "foo bar"
was produziert "foo bar"
.
Nun, der Grund , warum die anderen Antworten scheinen zu arbeiten, da cd
tut es selbst ist zusätzlich Parsing, aus dem Verhalten des üblichen Arguments divergierend verläuft (die übliche %1
, %2
, %3
und usw. in typischen Batch - Dateien).
Betrachten Sie zum Beispiel den eigentümlichen Befehl:
cd c:\documents and settings \some folder with spaces
Warum funktioniert es? Dies ist auf cd
sich selbst etwas zu tun Äquivalent der 7 Beitritt üblichen Argumente in eine logische Eins. Gemäß den cmd-Argumenten, die den Normen entsprechen, sehen wir 7 Argumente:
c:\documents
and
settings
\some
folder
with
spaces
Es ist, als ob cd
alle 7 Argumente zu einem logischen Argument zusammengefasst worden wären und etwas Ähnliches getan hätten array.join(" ")
, was den folgenden Pfad ergibt:
c:\documents and settings \some folder with spaces
Beachten Sie, dass dieses Verhalten nur (und einigen anderen Funktionen) eigencd
ist . Es hat nichts mit der üblichen Argumentation zu tun.
In der Tat cd
hat eine andere Besonderheit. Denken Sie daran, dass wir oben angegeben haben, dass wir die Ausgabe nicht erhalten konnten foo bar
? Die nächste Ausgabe, die wir erhalten können, ist durch Ausführen von:
test.bat foo" "bar
welche produziert foo" "bar
, oder:
test.bat "foo bar"
welche produziert "foo bar"
, oder:
test.bat "foo "bar
welche produziert "foo "bar
, oder:
test.bat foo" bar"
welche produziert foo" bar"
, oder:
test.bat "foo b"ar
welche produziert "foo b"ar
, oder:
test.bat fo"o bar"
welche produziert fo"o bar"
, oder:
test.bat fo"o ba"r
welche produziert fo"o ba"r
, oder:
test.bat "fo"o" bar"
welche produziert "fo"o" bar"
, oder:
test.bat "f""o""o"" ""b""a""r":
welche produziert "f""o""o"" ""b""a""r"
, oder sogar:
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
was produziert """"f"""o""""o"" ""ba"""r""""""""""
.
Alle obigen Beispiele haben eine Ähnlichkeit, nämlich, dass sie erzeugt werden, foo bar
nachdem wir die "
Zeichen abgeschnitten haben . cd
Dies muss auch der Autor erkannt haben ... wenn wir aus seinem cd
eigentümlichen Verhalten schließen würden, das alles"
, was es empfängt , abschneidet und all diese Befehle funktionieren lässt:
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