แม้จะมีคำตอบให้ภาพลวงตาที่ใช้งานได้ความจริงก็คือคุณไม่สามารถแอบเข้าไปในช่องว่างในการโต้แย้ง cmd ปกติ นี่เป็นเรื่องง่ายที่จะพิสูจน์:
บันทึก " echo %1
" test.bat
เป็น ไฟล์ชุดนี้จะส่งออกอาร์กิวเมนต์แรกซึ่ง cmd ผ่านเรา
ตอนนี้พยายามและเรียกใช้test.bat
การตั้งค่าของการ%1
foo bar
(โปรดทราบว่ามีช่องว่างระหว่างfoo
และbar
.)
ทดลองและข้อผิดพลาดไม่กี่ปีและตระหนักดีว่ามีวิธีที่จะทำมันไม่มี คนจะแนะนำที่จะหลบหนีโดยใช้^
แต่จะไม่เอาท์พุทtest.bat foo^ bar
foo bar
ดังนั้นไม่มีทางที่จะได้รับผลไม่foo bar
และที่ใกล้เคียงที่สุดที่เราได้รับคือการทำงานtest.bat foo" "bar
ซึ่งเป็นผู้ผลิตfoo" "bar
หรือการทำงานซึ่งเป็นผู้ผลิตtest.bat "foo bar"
"foo bar"
ตอนนี้เหตุผลที่คำตอบอื่น ๆปรากฏในการทำงานเป็นเพราะcd
ไม่เป็นของตัวเองแยกเพิ่มเติมแยกจากพฤติกรรมของการโต้แย้งปกติผ่าน (ปกติ%1
, %2
, %3
และ ฯลฯ ในไฟล์ชุดทั่วไป)
ตัวอย่างเช่นพิจารณาคำสั่งเฉพาะ:
cd c:\documents and settings \some folder with spaces
ทำไมมันทำงาน นี่คือสาเหตุที่cd
ตัวเองทำบางสิ่งบางอย่างที่เทียบเท่ากับการเข้าร่วม 7 ข้อโต้แย้งปกติเป็นหนึ่งตรรกะหนึ่ง ตามการโต้แย้ง cmd ผ่านบรรทัดฐานเราจะเห็นข้อโต้แย้งที่ 7:
c:\documents
and
settings
\some
folder
with
spaces
ราวกับว่าcd
ได้เข้าร่วมการขัดแย้งทั้ง 7 ข้อในตรรกะเดียวการทำสิ่งที่คล้ายกับ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""""""""""
ซึ่งเป็นผู้ผลิต
ตัวอย่างข้างต้นทั้งหมดมีความคล้ายคลึงกันอย่างใดอย่างหนึ่งซึ่งพวกเขาจะผลิต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