Làm cách nào để xóa một thư mục có tên kết thúc bằng dấu chấm (“.”)?


89

Tôi nhận được một số thư mục được tạo bởi phần mềm độc hại có tên kết thúc bằng dấu chấm như C:\a.\hoặc C:\b.\, v.v.

Tôi đã tìm thấy một giải pháp có thể xóa thư mục như vậy bằng lệnh rd /q /s "C:\a.\"nhưng nếu tôi gọi win API RemoveDirectory, nó sẽ trả về ERROR_FILE_NOT_FOUND.

Và mình chỉ thắc mắc làm cách nào để viết hàm xóa thư mục như vậy, cảm ơn

Tôi kiểm tra trên hệ thống Windows XP SP3 của riêng mình như thế này

tạo một thư mục C:\>mkdir a..\\\và tôi không thể nhấp đúp để truy cập thư mục này. và tôi có thể xóa bằng lệnh rd /q /s "C:\a.\"

(các) API hệ thống Windows rd /q /sgọi lệnh nào?


Tôi không thể tin rằng điều này vẫn xảy ra trong Windows 10, bởi chính bản cập nhật Windows (nó không thể xóa Windows.old sau khi cập nhật).
Các loại rau Chết tiệt

Câu trả lời:


147

Đây là một giải pháp cho vấn đề này :

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

1
Câu hỏi muốn một hàm API xóa thư mục và cho biết nó có thể được xóa bằng rd.
Jcl

4
Đủ công bằng - có thể đó là lý do tại sao nó không được đánh dấu là câu trả lời được chấp nhận, nhưng nó vẫn rất hữu ích cho những người sử dụng bị mắc kẹt với cùng một vấn đề nhưng chúng ta có thể sử dụng rd.
david.barkhuizen

2
Bạn vừa cứu được dây thần kinh của tôi. Cảm ơn bạn! : D
Benny Neugebauer

8
Lưu ý rằng điều này chỉ hoạt động từ CMD.exe KHÔNG phải PowerShell
Lorne K

2
cũng cố gắng chạy CMD.exetrong chế độ quản trị quá nếu nó không làm việc trong các lệnh không cao nhanh chóng
greg

63

Giải pháp: Khi bạn gọi RemoveDirectory, hãy đảm bảo rằng bạn đặt trước đường dẫn bằng chuỗi " \\?\".


Giải thích: Nó có mọi thứ liên quan đến dấu chấm. Theo MSDN, có một số trường hợp bạn không thể xóa tệp hoặc thư mục trên ổ đĩa NTFS, cụ thể là khi tên tệp không hợp lệ trong không gian tên Win32 (đó là lý do tại sao bạn không thể mở tệp bằng cách sử dụng phương pháp bình thường trong Windows Explorer).

Bạn có thể không xóa được tệp nếu tên tệp bao gồm tên không hợp lệ (ví dụ: tên tệp có khoảng trắng ở cuối hoặc dấu chấm hoặc tên tệp chỉ được tạo thành từ khoảng trắng). Để giải quyết vấn đề này, hãy sử dụng một công cụ sử dụng cú pháp nội bộ thích hợp để xóa tệp. Bạn có thể sử dụng cú pháp "\\? \" Với một số công cụ để thao tác trên các tệp này, ví dụ:
del "\\? \ c: \ path_to_file_that chứa dấu cách ở cuối .txt"
Nguyên nhân của vấn đề này tương tự như Nguyên nhân 4. Tuy nhiên, nếu bạn sử dụng cú pháp Win32 điển hình để mở tệp có khoảng trắng hoặc dấu chấm trong tên của nó, thì khoảng trắng hoặc dấu chấm ở cuối sẽ bị loại bỏ trước khi tệp thực được mở. Do đó, nếu bạn có hai tệp trong cùng một thư mục có tên "AFile.txt" và "AFile.txt" (lưu ý dấu cách sau tên tệp), nếu bạn cố gắng mở tệp thứ hai bằng cách sử dụng lệnh gọi Win32 tiêu chuẩn, bạn mở tệp đầu tiên thay thế. Tương tự, nếu bạn có một tệp có tên chỉ là "" (một ký tự khoảng trắng) và bạn cố gắng mở nó bằng cách sử dụng lệnh gọi Win32 tiêu chuẩn, thay vào đó bạn hãy mở thư mục mẹ của tệp. Trong trường hợp này, nếu bạn cố gắng thay đổi cài đặt bảo mật trên các tệp này, bạn có thể không thực hiện được hoặc bạn có thể bất ngờ thay đổi cài đặt trên các tệp khác nhau.

(Nguồn: http://support.microsoft.com/?kbid=320081 )


Tôi đã làm việc cẩn thận để xóa một tệp có tên hoàn thành bằng ".". Cảm ơn rât nhiều !
AFract

1
Nó đã hoạt động khi chuyển del sang lượt likerd "\\?\C:\Users\ahmed\Desktop\buggy."
guneysus

Điều này hoạt động tốt trên cmd nhưng có tương đương cho PowerShell không? rdtrong pwsh là một bí danh remove-itemkhông hỗ trợ `\\? \ '.
Kagami Sascha Rosylight

1
Chắc chắn rồi. Tôi vừa mới sử dụng PowerShell's rd để xóa một tệp như vậy và nó hoạt động tốt. Kiểm tra lại cú pháp của bạn.
SilverbackNet

Chà. Đã gặp sự cố này khi cố gắng thực hiện một số Xử lý ngôn ngữ tự nhiên trên tập dữ liệu (mọi tệp trong tập dữ liệu đều được đặt tên {IncrementalNumber}.) và tôi rất bối rối về lý do tại sao các tập lệnh xử lý dữ liệu của mình không thành công. Điều này giờ có lý, nhưng có vẻ như hành vi này quá bất ngờ nên nó có thể có các phân nhánh bảo mật do các ứng dụng xử lý sai tên tệp kết thúc bằng dấu cách hoặc dấu chấm.
Spencer D

46

Ive đã đăng bài này trên SU và tôi cũng quyết định đăng nó ở đây. Đó là cách đơn giản và nhanh nhất và dễ nhất để đạt được điều này. Bây giờ tôi đang cười vì nó đơn giản biết bao nhiêu.

  1. Cài đặt WinRAR
  2. Làm theo quy trình Từng bước từ hình ảnh:
  3. nhập mô tả hình ảnh ở đây
  4. nhập mô tả hình ảnh ở đây
  5. nhập mô tả hình ảnh ở đây
  6. nhập mô tả hình ảnh ở đây

Bản thân tôi đã cài đặt WinRaR nên tôi quyết định chứng minh giải pháp thay thế trong đó.
Cách giải quyết này cũng có thể thực hiện được bằng cách sử dụng 7zip.

Một điều nữa tôi nên đề cập là, có vẻ như vấn đề là do sử dụng windows explorer và bất kỳ trình duyệt tệp nào khác (như chính trình duyệt tệp winrar, ftp explorers, v.v.) sẽ coi các tệp này như bình thường.
Bạn có thể thử sử dụng bất kỳ trình duyệt tệp nào và chỉ cần xóa các tệp đó và không cần lưu trữ chúng! Chúc mừng!


6
Thật là một giải pháp sáng tạo!
Nosgoroth

8

Nếu bạn đã cài đặt git (bạn có thể lấy ir từ đây ) thì nó đơn giản như sau:

  1. Điều hướng File Explorer đến vị trí có thư mục có vấn đề.
  2. Menu ngữ cảnh (nút chuột phải)> Git Bash Here.
  3. rm -rf Foldername./

rm: cannot remove ‘.bin’: Directory not empty
Màu xanh lá cây

@Green nếu bạn có quyền xóa nội dung thư mục, thì -rfphần này phải quan tâm đến nội dung thư mục.
Laurynas Lazauskas

7

Khi bạn thấy tên là "a.", Nhưng tên thực là "a .."

Thử đi:

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

Và bạn có thể thử khám phá thư mục bằng mã này:

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

5

Tôi đã sử dụng " WinRar " Một bộ xử lý RAR, ZIP đơn giản. Bạn có thể sử dụng bất kỳ loại trình chỉnh sửa tên tệp nào. Chỉ cần mở thư mục chứa tệp của bạn trong WinRar và chọn đổi tên sau khi nhấp chuột phải vào tệp / thư mục bạn muốn đổi tên và điền vào tên mới.


Làm thế nào mà có nghĩa là giúp đỡ?
Tavo

1
Giúp bạn duyệt tệp / thư mục và đổi tên tệp thành bất kỳ ... và hoàn tất.
Aryan

1
Điều này thực sự đã giúp tôi; Tôi đã sử dụng WinRar để giải nén một loạt các tệp, một trong số đó bao gồm một thư mục kết thúc bằng dấu chấm. Windows không thể xóa nó hoặc thực sự đổi tên nó, nhưng tôi có thể đổi tên nó trong WinRar và sau đó xóa nó trong Windows Explorer (win 10). Cảm ơn!
Nick có thể

2

Cố gắng sử dụng chương trình bẻ khóa để xóa các tệp và thư mục mà bạn không thể xóa bình thường.


3
Tôi tò mò về cách người mở khóa có thể làm điều này!
jerry.liu


0

nếu bạn muốn giữ các tệp ở đó các tùy chọn trong bash.
bạn sẽ yêu cầu gói Windows Subsystem for Linux (tôi đã cài đặt Ubuntu)

để giữ các tệp. mở dấu nhắc lệnh và chuyển cd tới vị trí của tệp hoặc thư mục.
bây giờ gõ " bash"
điều này sẽ mở bash trong lời nhắc. bây giờ hãy enter mv '[folder or file you want to move]' '[new name (can include path)]'(còn nhiều thứ khác với mv, vì vậy nếu bạn muốn đọc tất cả các tùy chọn của nó, hãy sử dụng 'man mv', điều này sẽ mở trang hướng dẫn sử dụng của nó (sau đó sử dụng q để quay lại bash))
lệnh mv là viết tắt của chuyển, nhưng có chức năng phụ là đổi tên sự vật.
cũng trong bash sử dụng 'dấu nháy đơn' và không phải là "dấu nháy kép" bình thường, như bash mong đợi "dấu nháy đơn".

heres một ví dụ. giả sử thư mục của bạn có tên là " data 1." nằm trong c:\users(do đó, đường dẫn đầy đủ đến thư mục lỗi là c:\users\data 1.
1. mở dấu nhắc lệnh bằng bất kỳ phương pháp nào
2. nhập cd c:\users
3. bây giờ nhập bashđiều này tải bash trong thư mục bạn đã ở trước đó
4. cuối cùng nhập mv 'data 1.' 'data 1'
5. thư mục hiện có thể truy cập được và bạn có thể chọn xóa nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.