cmd.exe:“ del * .txt” ยังลบ * .txt1 ฯลฯ [ซ้ำกัน]


8

ซ้ำเป็นไปได้:
คำสั่ง WinXP dir: นามสกุล 3 และ 4 ถ่านเหมือนกันหรือไม่

ฉันรำคาญกับพฤติกรรมแปลก ๆ ของ cmd.exe มาเป็นเวลานาน (อย่างน้อย WinXP และ Windows7) คำสั่งที่ชอบdel *.txtจะลบ*.txt1ไฟล์ออกด้วย(จำนวนอักขระใด ๆ หลังจาก '.txt' จะทำ) นี่เป็นข้อบกพร่องที่รู้จักกันดีหรืออะไร

คำตอบ:


8

มันเป็นที่รู้จักกันบ้างเป็นครั้งคราวบ้าง?

คำอธิบายของพฤติกรรมอยู่ที่นี่พร้อมด้วยการแก้ไขที่เป็นไปได้

สรุป: มันมาจากวิธีที่ NTFS จัดการกับชื่อไฟล์สั้น (8.3) สำหรับความเข้ากันได้กับสิ่งที่เก่ากว่าที่ไม่สามารถจัดการกับชื่อไฟล์แบบยาว dir /xสามารถใช้เพื่อดูชื่อไฟล์สั้น ๆ เช่น:

C:\>dir /x *~*
 ...
02/25/2011  08:18 AM    <DIR>          DOCUME~1     Documents and Settings
05/28/2011  12:02 AM    <DIR>          PROGRA~1     Program Files
 ...

ส่วนขยายที่ยาวเกินสามตัวอักษรจะถูกตัดทอนให้เป็นชื่อไฟล์สั้น ๆ ดังนั้น.txt1, .txtxtxtxt, .txt_fileฯลฯ .txtทั้งหมดจะกลายเป็น


6

ไฟล์ที่มีตัวอักษรมากกว่า 4 ตัวในนามสกุล (รวมถึงกฎอื่น ๆ ที่ใช้บังคับ) รับชื่อย่อดังนั้นตัวอย่างเช่น "foo.txt1" มีชื่อย่อว่า "foo ~ 1.txt" DEL(เช่นDIRและอาจเป็นไปได้ว่าcmd.exeคำสั่ง builtin อื่น ๆ ส่วนใหญ่) จะทำงานกับชื่อย่อ สำหรับการอภิปรายในหัวข้อที่เกี่ยวข้องดูที่นี่: http://blogs.msdn.com/b/oldnewthing/archive/2005/07/20/440918.aspx


+1 สำหรับลิงก์ที่เชื่อถือได้มากกว่าของฉัน
Jim Davis

2

สิ่งนี้จะเป็นในระบบไฟล์ FAT / VFAT หรือไม่? ถ้าเป็นเช่นนั้นคุณกำลังถูกแฮกเกอร์ใช้เพื่อแสดงชื่อที่ไม่เข้ากับแบบแผน 8.3 มีDIRตัวเลือกที่จะแสดงชื่อย่อที่ถูกตัดคำซึ่งจะเริ่มต้นด้วยชื่อไฟล์จริง แต่มี a ~และตัวเลขก่อนส่วนขยายจากนั้นนามสกุลจะต่อยอดที่ 3 ตัวอักษร (ตัวอย่าง: C:\Program Filesโดยปกติแปลเป็นC:\PROGRA~1) ไวด์การ์ดอาจจับคู่กับชื่อเหล่านี้โดยไม่คาดหมาย สิ่งนี้ไม่ควรเกิดขึ้นกับ NTFS หรือ (ฉันคิดว่า) ในการแชร์เครือข่าย ยกเว้นว่า DOS ยังไม่ตายดูเหมือนว่า ....


2

คุณอาจใช้Forfilesคำสั่งสำหรับการแก้ปัญหา

เช่น.

Forfiles  -s -m *.txt -c "cmd /C del /q @path"

ตรงกับtxtตอนจบเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.