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 %1
untuk foo bar
. (Perhatikan bahwa ada spasi antara foo
dan 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^ bar
tidak 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" "bar
yang menghasilkan foo" "bar
, atau menjalankan test.bat "foo bar"
yang menghasilkan "foo bar"
.
Sekarang, alasan jawaban yang lain muncul untuk bekerja adalah karena cd
tidak itu sendiri parsing tambahan, menyimpang dari perilaku argumen yang biasa melewati (biasa %1
, %2
, %3
dan 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 cd
telah 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 cd
hanya (dan beberapa fungsi lainnya). Ini tidak ada hubungannya dengan berlalunya argumen.
Memang, cd
memiliki 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 bar
setelah kita memotong "
karakter. cd
Penulis pasti menyadari hal ini juga ... jika kita menyimpulkan dari cd
perilaku 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