Terlepas dari jawaban yang memberikan ilusi bahwa itu berhasil, faktanya adalah Anda tidak dapat menyelinap di ruang ke dalam argumen cmd biasa. Ini mudah dibuktikan:
Simpan " echo %1" sebagai test.bat. File batch ini akan menampilkan argumen pertama yang cmd melewati kita.
Sekarang, coba dan jalankan test.bat, tetapkan nilai %1untuk foo bar. (Perhatikan bahwa ada spasi antara foodan bar.)
Coba-coba selama beberapa tahun dan sadari bahwa tidak ada cara untuk melakukannya . Orang-orang akan menyarankan untuk melarikan diri menggunakan ^, namun test.bat foo^ bartidak akan menghasilkan foo bar.
Jadi, tidak ada cara untuk mendapatkan output foo bar, dan yang terdekat yang bisa kita dapatkan adalah menjalankan test.bat foo" "baryang menghasilkan foo" "bar, atau menjalankan test.bat "foo bar"yang menghasilkan "foo bar".
Sekarang, alasan jawaban yang lain muncul untuk bekerja adalah karena cdtidak itu sendiri parsing tambahan, menyimpang dari perilaku argumen yang biasa melewati (biasa %1, %2, %3dan lain-lain dalam batch file khas).
Misalnya, perhatikan perintah khusus:
cd c:\documents and settings \some folder with spaces
Mengapa ini berhasil? Ini karena ia cd sendiri melakukan sesuatu yang setara dengan menggabungkan 7 argumen biasa menjadi satu argumen logis. Menurut cmd argumen yang melewati norma, kita melihat 7 argumen:
c:\documents
and
settings
\some
folder
with
spaces
Seolah-olah cdtelah menggabungkan semua 7 argumen menjadi satu yang logis, melakukan sesuatu yang mirip array.join(" "), yang menghasilkan jalan:
c:\documents and settings \some folder with spaces
Perhatikan bahwa perilaku ini khusus untuk cdhanya (dan beberapa fungsi lainnya). Ini tidak ada hubungannya dengan berlalunya argumen.
Memang, cdmemiliki kekhasan lain. Ingat kami menyatakan di atas bahwa kami tidak bisa mendapatkan output foo bar? Output terdekat yang bisa kita dapatkan adalah dengan menjalankan:
test.bat foo" "bar
yang menghasilkan foo" "bar, atau:
test.bat "foo bar"
yang menghasilkan "foo bar", atau:
test.bat "foo "bar
yang menghasilkan "foo "bar, atau:
test.bat foo" bar"
yang menghasilkan foo" bar", atau:
test.bat "foo b"ar
yang menghasilkan "foo b"ar, atau:
test.bat fo"o bar"
yang menghasilkan fo"o bar", atau:
test.bat fo"o ba"r
yang menghasilkan fo"o ba"r, atau:
test.bat "fo"o" bar"
yang menghasilkan "fo"o" bar", atau:
test.bat "f""o""o"" ""b""a""r":
yang menghasilkan "f""o""o"" ""b""a""r", atau bahkan:
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
yang menghasilkan """"f"""o""""o"" ""ba"""r"""""""""".
Semua contoh di atas memiliki satu kesamaan, yang akan mereka hasilkan foo barsetelah kita memotong "karakter. cdPenulis pasti menyadari hal ini juga ... jika kita menyimpulkan dari cdperilaku aneh yang memotong semua "yang diterimanya , memungkinkan semua perintah ini bekerja:
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