จะลบโฟลเดอร์ที่ชื่อลงท้ายด้วยจุด (“.”) ได้อย่างไร?


90

ฉันได้รับบางโฟลเดอร์ที่สร้างโดยมัลแวร์ซึ่งมีชื่อลงท้ายด้วยจุดเช่นC:\a.\หรือC:\b.\ฯลฯ

ผมพบว่าวิธีการแก้ปัญหาที่สามารถลบโฟลเดอร์ดังกล่าวมีคำสั่งrd /q /s "C:\a.\"แต่ถ้าผมเรียก API ชนะก็จะส่งกลับRemoveDirectoryERROR_FILE_NOT_FOUND

และฉันแค่สงสัยว่าจะเขียนฟังก์ชันเพื่อลบไดเรกทอรีดังกล่าวได้อย่างไรขอบคุณ

ฉันทดสอบระบบ Windows XP SP3 ของตัวเองแบบนี้

สร้างโฟลเดอร์C:\>mkdir a..\\\และฉันไม่สามารถดับเบิลคลิกเพื่อเข้าถึงโฟลเดอร์นี้ได้ และฉันสามารถลบออกด้วยคำสั่ง rd /q /s "C:\a.\"

API ระบบ Windows อะไรที่rd /q /sเรียกคำสั่ง


ฉันไม่อยากเชื่อเลยว่าสิ่งนี้ยังคงเกิดขึ้นใน Windows 10 โดยการอัปเดตของ Windows เอง (ไม่สามารถลบ Windows.old ได้หลังจากอัปเดต)
ผักเหี้ย

คำตอบ:


149

นี่คือวิธีแก้ปัญหานี้ :

rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."

1
คำถามที่ต้องการฟังก์ชั่น API rdเพื่อลบโฟลเดอร์และรัฐก็สามารถลบออกได้ด้วย
Jcl

4
พอใช้ - นั่นอาจเป็นเหตุผลว่าทำไมจึงไม่ถูกทำเครื่องหมายว่าเป็นคำตอบที่ยอมรับ แต่ก็ยังมีประโยชน์มากสำหรับการใช้งานที่ติดปัญหาเดียวกัน แต่เราสามารถใช้ rd ได้ที่ไหน
david.barkhuizen

2
คุณเพิ่งช่วยฉันประสาท ขอขอบคุณ! : D
Benny Neugebauer

8
โปรดทราบว่าสิ่งนี้ใช้ได้เฉพาะกับ CMD.exe ไม่ใช่ PowerShell
Lorne K

2
ลองเรียกใช้CMD.exeในโหมดผู้ดูแลระบบด้วยหากไม่ทำงานในพรอมต์คำสั่งที่ไม่ได้ยกระดับ
greg

63

วิธีแก้ไข: เมื่อคุณเรียก RemoveDirectory ตรวจสอบให้แน่ใจว่าคุณนำหน้าเส้นทางด้วยสตริง " \\?\"


คำอธิบาย: มีทุกอย่างที่เกี่ยวข้องกับจุด ตาม MSDN มีบางกรณีที่คุณอาจไม่สามารถลบไฟล์หรือโฟลเดอร์ในไดรฟ์ข้อมูล NTFS โดยเฉพาะเมื่อชื่อไฟล์ไม่ถูกต้องในพื้นที่ชื่อ Win32 (ซึ่งเป็นสาเหตุที่คุณไม่สามารถเปิดไฟล์โดยใช้ วิธีการปกติใน Windows Explorer)

คุณอาจไม่สามารถลบไฟล์ได้หากชื่อไฟล์มีชื่อที่ไม่ถูกต้อง (ตัวอย่างเช่นชื่อไฟล์มีช่องว่างต่อท้ายหรือช่วงต่อท้ายหรือชื่อไฟล์ประกอบด้วยช่องว่างเท่านั้น) ในการแก้ไขปัญหานี้ให้ใช้เครื่องมือที่ใช้ไวยากรณ์ภายในที่เหมาะสมเพื่อลบไฟล์ คุณสามารถใช้ไวยากรณ์ "\\? \" กับเครื่องมือบางอย่างเพื่อดำเนินการกับไฟล์เหล่านี้ตัวอย่างเช่น:
del "\\? \ c: \ path_to_file_that มีช่องว่างต่อท้าย"
สาเหตุของปัญหานี้คล้ายกับสาเหตุ 4 อย่างไรก็ตามหากคุณใช้ไวยากรณ์ Win32 ทั่วไปเพื่อเปิดไฟล์ที่มีช่องว่างต่อท้ายหรือจุดต่อท้ายในชื่อช่องว่างหรือจุดต่อท้ายจะถูกตัดออกก่อนที่ไฟล์จริงจะถูกเปิด ดังนั้นหากคุณมีสองไฟล์ในโฟลเดอร์เดียวกันชื่อ "AFile.txt" และ "AFile.txt" (สังเกตช่องว่างหลังชื่อไฟล์) หากคุณพยายามเปิดไฟล์ที่สองโดยใช้การเรียก Win32 มาตรฐานให้เปิด ไฟล์แรกแทน ในทำนองเดียวกันหากคุณมีไฟล์ที่มีชื่อเป็นเพียง "" (อักขระเว้นวรรค) และพยายามเปิดโดยใช้การเรียก Win32 มาตรฐานให้เปิดโฟลเดอร์หลักของไฟล์แทน ในสถานการณ์นี้หากคุณพยายามเปลี่ยนการตั้งค่าความปลอดภัยของไฟล์เหล่านี้คุณอาจไม่สามารถทำได้หรือคุณอาจเปลี่ยนการตั้งค่าของไฟล์อื่นโดยไม่คาดคิด

(ที่มา: http://support.microsoft.com/?kbid=320081 )


ทำงานอย่างสมบูรณ์แบบสำหรับฉันในการลบไฟล์ที่มีชื่อจบด้วย "." ขอบคุณมาก !
หลัง

1
มันทำงานเปลี่ยน del เป็น rd likerd "\\?\C:\Users\ahmed\Desktop\buggy."
guneysus

สิ่งนี้ใช้งานได้ดีบน cmd แต่ PowerShell เทียบเท่าหรือไม่ rdใน pwsh เป็นนามแฝงremove-itemที่ไม่รองรับ "\\? \"
Kagami Sascha Rosylight

1
แน่นอนว่ามันไม่ ฉันเพิ่งใช้ PowerShell's rd เพื่อลบไฟล์ดังกล่าวและมันก็ใช้งานได้ดี ตรวจสอบไวยากรณ์ของคุณอีกครั้ง
SilverbackNet

ว้าว. พบปัญหานี้ขณะพยายามประมวลผลภาษาธรรมชาติบนชุดข้อมูล (ทุกไฟล์ในชุดข้อมูลมีชื่อ{IncrementalNumber}.) และฉันสับสนมากว่าเหตุใดสคริปต์การประมวลผลข้อมูลของฉันจึงล้มเหลว สิ่งนี้สมเหตุสมผลแล้ว แต่ดูเหมือนว่าพฤติกรรมจะไม่คาดคิดจนอาจมีการแบ่งส่วนความปลอดภัยเนื่องจากแอปพลิเคชันจัดการชื่อไฟล์ที่ลงท้ายด้วยช่องว่างหรือจุดไม่ถูกต้อง
Spencer D

46

ฉันเคยโพสต์เรื่องนี้ใน SU และฉันก็ตัดสินใจโพสต์ที่นี่ด้วย เป็นวิธีที่ง่ายและรวดเร็วและง่ายที่สุดในการบรรลุเป้าหมายนี้ ตอนนี้ฉันกำลังหัวเราะว่ามันเรียบง่ายมากแค่ไหน

  1. ติดตั้งWinRAR
  2. ทำตามขั้นตอนทีละขั้นตอนจากรูปภาพ:
  3. ป้อนคำอธิบายภาพที่นี่
  4. ป้อนคำอธิบายภาพที่นี่
  5. ป้อนคำอธิบายภาพที่นี่
  6. ป้อนคำอธิบายภาพที่นี่

ตัวฉันเองติดตั้ง WinRaR ดังนั้นฉันจึงตัดสินใจที่จะสาธิตวิธีแก้ปัญหาในนั้น
วิธีแก้ปัญหานี้สามารถทำได้โดยใช้ 7zip

อีกสิ่งหนึ่งที่ฉันควรพูดถึงก็คือเนื่องจากดูเหมือนว่าปัญหาจะเกิดจากการใช้ windows explorer และเบราว์เซอร์ไฟล์อื่น ๆ (เช่นเบราว์เซอร์ไฟล์ winrar เอง ftp explorers เป็นต้น) จะถือว่าไฟล์นี้เป็นปกติ
คุณสามารถลองใช้เบราว์เซอร์ไฟล์ใดก็ได้และเพียงแค่ลบไฟล์เหล่านั้นและไม่ต้องกังวลกับการเก็บถาวร! ไชโย!


6
ช่างเป็นทางออกที่สร้างสรรค์จริงๆ!
Nosgoroth

8

เมื่อเห็นชื่อคือ "ก." แต่ชื่อจริงคือ "ก .. "

ลองสิ่งนี้:

rd /q /s "C:\a..\"

และคุณสามารถลองสำรวจโฟลเดอร์ด้วยรหัสนี้:

for /f "tokens=3 delims=<>" %%a in ('dir /ad /x "C:\*" ^| findstr " a\.\.$"') do (
  for /f "tokens=1" %%b in ("%%a") do start "" "%%~fb"
)

8

หากคุณติดตั้งคอมไพล์แล้ว (คุณสามารถรับ ir ได้จากที่นี่ ) ก็ทำได้ง่ายๆดังนี้:

  1. นำทาง File Explorer ไปยังตำแหน่งที่โฟลเดอร์ที่มีปัญหาตั้งอยู่
  2. เมนูบริบท (ปุ่มเมาส์ขวา)> Git Bash ที่นี่
  3. rm -rf Foldername./

rm: cannot remove ‘.bin’: Directory not empty
กรีน

@ กรีนหากคุณมีสิทธิ์ในการลบเนื้อหาโฟลเดอร์-rfส่วนนี้ควรดูแลเนื้อหาของโฟลเดอร์
Laurynas Lazauskas

5

ฉันใช้ " WinRar " ตัวประมวลผล RAR, ZIP แบบธรรมดา คุณสามารถใช้โปรแกรมแก้ไขชื่อไฟล์ประเภทใดก็ได้ เพียงเปิดไดเร็กทอรีที่ไฟล์ของคุณอยู่ใน WinRar และเลือกเปลี่ยนชื่อหลังจากคลิกขวาที่ไฟล์ / โฟลเดอร์ที่คุณต้องการเปลี่ยนชื่อและกรอกชื่อใหม่


จะช่วยได้อย่างไร?
Tavo

1
ช่วยให้คุณเรียกดูไฟล์ / โฟลเดอร์และเปลี่ยนชื่อไฟล์เป็นอะไรก็ได้ ... และเสร็จสิ้น
อารยัน

1
สิ่งนี้ช่วยฉันได้จริง ฉันใช้ WinRar เพื่อคลายซิปไฟล์จำนวนมากซึ่งหนึ่งในนั้นมีโฟลเดอร์ที่ลงท้ายด้วยช่วงเวลาหนึ่ง Windows ไม่สามารถลบหรือเปลี่ยนชื่อได้ แต่ฉันสามารถเปลี่ยนชื่อได้โดยไม่มีปัญหาใน WinRar จากนั้นลบใน Windows Explorer (win 10) ขอบคุณ!
Nick

2

พยายามใช้โปรแกรมUnlockerเพื่อลบไฟล์และโฟลเดอร์ที่คุณไม่สามารถลบได้ตามปกติ


3
ฉันอยากรู้ว่าตัวปลดล็อกทำสิ่งนี้ได้อย่างไร!
jerry.liu


0

หากคุณต้องการเก็บไฟล์ไว้มีตัวเลือกใน bash เช่นกัน
คุณจะต้องใช้แพ็คเกจ Windows Subsystem for Linux (ฉันติดตั้ง Ubuntu แล้ว)

เพื่อเก็บไฟล์ เปิดพรอมต์คำสั่งและซีดีไปยังตำแหน่งที่ไฟล์หรือโฟลเดอร์อยู่
ตอนนี้พิมพ์ " bash"
ซึ่งจะเปิด bash ในพรอมต์ ตอนนี้ป้อนmv '[folder or file you want to move]' '[new name (can include path)]'(มีมากกว่า mv ดังนั้นหากคุณต้องการอ่านตัวเลือกทั้งหมดให้ใช้ 'man mv' สิ่งนี้จะเปิดหน้าคู่มือ (จากนั้นใช้ q เพื่อกลับไปที่ bash))
คำสั่ง mv นั้นสั้นสำหรับการย้าย แต่มัน มีหน้าที่รองในการเปลี่ยนชื่อสิ่งต่างๆ
นอกจากนี้ในการทุบตีให้ใช้ 'single quotes' และไม่ใช่ "double quote" ตามปกติเนื่องจาก bash คาดว่าจะเป็น "single quotes"

นี่เป็นตัวอย่าง สมมติว่าโฟลเดอร์ของคุณชื่อ " data 1." อยู่ในc:\users(ดังนั้นเส้นทางแบบเต็มไปยังโฟลเดอร์ข้อผิดพลาดคือc:\users\data 1.
1. เปิดพรอมต์คำสั่งโดยใช้วิธีใดก็ได้
2. ป้อนcd c:\users
3. ตอนนี้พิมพ์bashbash นี้ในโฟลเดอร์ที่คุณเคยอยู่ใน
4. สุดท้ายพิมพ์mv 'data 1.' 'data 1'
5 ตอนนี้สามารถเข้าถึงโฟลเดอร์ได้แล้วและคุณสามารถเลือกที่จะลบได้

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