それが機能するという幻想を与える答えにもかかわらず、実際には、通常のcmd引数にスペースをこっそり入れることはできません。これは簡単に証明できます:
echo %1
として保存しますtest.bat
。このバッチファイルは、cmdが渡す最初の引数を出力します。
次に、test.bat
の値を%1
に設定して、実行してみてくださいfoo bar
。(foo
との間にスペース文字があることに注意してくださいbar
。)
数年間の試行錯誤を繰り返して、それを行う方法がないことを認識してください。人々が使用して脱出することをお勧めします^
、まだtest.bat foo^ bar
出力しませんfoo bar
。
したがって、出力を取得する方法はなく、取得foo bar
できる最も近いものはrunningでtest.bat foo" "bar
あるfoo" "bar
か、またはrunningでtest.bat "foo bar"
あるかを生成し"foo bar"
ます。
さて、他の回答には理由現れるので、仕事にはあるcd
んそれは自分だ渡す通常の引数(通常の振る舞いから分岐し、追加の解析%1
、%2
、%3
典型的なバッチファイル内およびなど)。
たとえば、独特なコマンドを考えてみましょう。
cd c:\documents and settings \some folder with spaces
なぜ機能するのですか?これがためですcd
自身 7つの参加の同等何かやっていつも一つの論理1に引数を。規範を渡すcmd引数によると、7つの引数があります:
c:\documents
and
settings
\some
folder
with
spaces
これcd
は、7つの引数すべてを1つの論理的な引数に結合し、に似た何かarray.join(" ")
をしてパスを生成したかのようです。
c:\documents and settings \some folder with spaces
この動作は(および他のいくつかの関数)のみに固有であることにcd
注意してください。通常の引数の受け渡しとは関係ありません。
確かに、cd
別の特徴があります。上記のように、出力を取得できなかったことを覚えていますfoo bar
か?取得できる最も近い出力は、次を実行することです。
test.bat foo" "bar
を生成するfoo" "bar
、または:
test.bat "foo bar"
を生成する"foo bar"
、または:
test.bat "foo "bar
を生成する"foo "bar
、または:
test.bat foo" bar"
を生成するfoo" bar"
、または:
test.bat "foo b"ar
を生成する"foo b"ar
、または:
test.bat fo"o bar"
を生成するfo"o bar"
、または:
test.bat fo"o ba"r
を生成するfo"o ba"r
、または:
test.bat "fo"o" bar"
を生成する"fo"o" bar"
、または:
test.bat "f""o""o"" ""b""a""r":
を生成する"f""o""o"" ""b""a""r"
、または:
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
を生成し""""f"""o""""o"" ""ba"""r""""""""""
ます。
上記の例にはすべて1つの類似点があります。これはfoo bar
、"
文字を削除した後に生成されます。cd
の作者もこれに気付いていたに違いありません...もし私たちが受け取ったすべてcd
をトリムし"
、これらのすべてのコマンドが機能するようにする独特の振る舞いから推測するなら:
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