ทำไมคุณไม่สามารถใช้อักขระพิเศษในชื่อไฟล์เช่น“?” หรือ“;”?


17

เมื่อฉันพยายามบันทึกไฟล์หากฉันใช้อักขระพิเศษในชื่อ (เช่นเครื่องหมายจุดคู่เครื่องหมายคำถามหรือเครื่องหมายอัศเจรีย์) ใน Windows ฉันได้รับข้อความแจ้งว่าชื่อไฟล์ไม่ถูกต้อง

ทำไมถึงเป็นอย่างนั้น?



คุณพยายามบันทึกไฟล์ไว้ในโปรแกรมใดและตัวละครที่ละเมิดในไฟล์หรือ (ตามที่ปรากฏ) ในชื่อไฟล์คืออะไร?
Jukka K. Korpela


คำตอบ:


22

มีอักขระหลายตัวที่มีความหมายพิเศษสำหรับ Windows (และไปยัง DOS ซึ่งตัวละครส่วนใหญ่มาจากเดิม)

จากMSDN :

ชื่อไฟล์ต้องไม่มีอักขระใด ๆ ต่อไปนี้:
\ /: *? "<> |

/เป็นสวิตช์ (และตัวแยกไดเรกทอรี)
\เป็นตัวคั่นไดเรกทอรี
:เป็นตัวกำหนดไดรฟ์
*และ?เป็นไวลด์การ์ดที่ใช้ในการค้นหา
"เป็นวิธีการอนุญาตให้มีช่องว่างในพารามิเตอร์
<และ>เป็นการเปลี่ยนเส้นทางที่อนุญาตให้อินพุทและเอาท์พุทของโปรแกรมมาจากและไปที่สิ่งอื่นนอกเหนือจากหน้าจอ / คีย์บอร์ด
|เป็นไพพ์ที่อนุญาตให้เอาต์พุตจากโปรแกรมหนึ่งเพื่อใช้เป็นอินพุตไปยังถัดไป


1
เพื่อชี้แจงคำตอบนี้อักขระพิเศษเหล่านี้อาจรบกวนการแยกบรรทัดคำสั่ง (หรือพา ธ ) หากอยู่ในชื่อไฟล์ ไม่มีความต้องการที่จะกำหนดชื่อไฟล์ในทางใดทางหนึ่ง (เช่นล้อมรอบด้วยเครื่องหมายคำพูดหรือช่องว่าง) ดังนั้นการเผชิญหน้ากับถ่านพิเศษจะทำให้การแยกวิเคราะห์ไม่ถูกต้อง (เช่นเป็นส่วนถ่านพิเศษของชื่อไฟล์
ขี้เลื่อย

1
อย่างไรก็ตามเป็นที่พิสูจน์ได้ว่าข้อ จำกัด บางประการนี้ไม่จำเป็นอีกต่อไปเนื่องจากการจัดการชื่อไฟล์ที่ยาวและเครื่องหมายคำพูด \ ? *และ"เป็นสิ่งเดียวที่จำเป็นจริงๆในไวยากรณ์ปัจจุบันเนื่องจากอักขระอื่นมีประโยชน์นอกเครื่องหมายคำพูดเท่านั้น ข้อยกเว้นคือ: ซึ่งมีประโยชน์เฉพาะเป็นตัวละครตัวที่สองซึ่งอาจผิดกฎหมายในขณะที่อนุญาตให้มันที่อื่น กล่าวอีกนัยหนึ่งไม่มีชื่อไฟล์A:A letter's story.txtแต่ไม่มีปัญหากับไฟล์ชื่อSarah: My favorite cat.txt
trlkly

<>"เป็นอักขระไวด์การ์ดที่สงวนไว้ Windows ใช้พวกเขาจะใช้ความหมายที่ซับซ้อนสำหรับ DOS *?.เมื่อแปลพื้นเมือง NT *?.ซึ่งมีความหมายที่ง่ายสำหรับ อักขระไวด์การ์ดหกตัวถูกสงวนไว้เนื่องจาก Windows ใช้การจับคู่ไวด์การ์ดในระบบไฟล์เองเช่นในการNtQueryDirectoryFileเรียกระบบโดยตรงโดยไม่มีกลไกการหลบหลีก ใน Unix จะมีการใช้สัญลักษณ์แทนในระดับแอปพลิเคชันซึ่งโดยปกติจะเป็นเชลล์ที่รองรับการหลบหนี
Eryk Sun

โปรดทราบว่า:โดยปกติจะสงวนไว้ในชื่อไฟล์ แต่ไม่ได้อยู่ในพา ธ ไฟล์ มันใช้สำหรับชื่ออุปกรณ์และเป็นตัวคั่นสำหรับสตรีมไฟล์ (เช่น "ชื่อไฟล์: streamname: streamtype") นอกจากนี้บางระบบไฟล์เช่น VirtualBox แชร์โฟลเดอร์ของระบบไฟล์อนุญาตให้:, |และการควบคุมตัวอักษร ASCII (1-31) ในชื่อไฟล์ แต่พวกเขากำลังลิขสิทธิ์ในทุกระบบไฟล์ไมโครซอฟท์ยกเว้นสำหรับระบบไฟล์ชื่อ-ท่อ
Eryk Sun
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.