Как удалить папку, имя которой оканчивается точкой (".")? - PullRequest
71 голосов
/ 02 ноября 2010

Я получил несколько папок, созданных вредоносными программами, имя которых оканчивается точкой, например C:\a.\ или C:\b.\ и т. Д.

Я нашел решение, которое может удалить такую ​​папку с помощью команды rd /q /s "C:\a.\", но если я вызываю win API RemoveDirectory, возвращается ERROR_FILE_NOT_FOUND.

И мне просто интересно, как написать функцию для удаления такой директории, спасибо

Я тестирую на своей собственной системе Windows XP SP3 следующим образом

создайте папку C:\>mkdir a..\\\, и я не могу дважды щелкнуть для доступа к этой папке. и я могу удалить с помощью команды rd /q /s "C:\a.\"

какой системный API-интерфейс Windows вызывается командой rd /q /s?

Ответы [ 8 ]

122 голосов
/ 08 ноября 2010

Вот решение этой проблемы :

rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."
54 голосов
/ 08 ноября 2010

Решение: Когда вы вызываете RemoveDirectory, убедитесь, что в качестве префикса пути указана строка «\\?\».


Пояснение: Это все, что связано с точкой. Согласно MSDN, в некоторых случаях вы не сможете удалить файл или папку на томе NTFS, особенно когда имя файла недопустимо в пространстве имен Win32 (поэтому вы не можете открыть файл с помощью обычные методы в проводнике Windows).

Вы не сможете удалить файл, если имя файла содержит недопустимое имя (например, имя файла содержит завершающий пробел или завершающий период или имя файла состоит только из пробела). Чтобы решить эту проблему, используйте инструмент, который использует соответствующий внутренний синтаксис для удаления файла. Вы можете использовать синтаксис "\\? \" С некоторыми инструментами для работы с этими файлами, например:
del "\\? \ C: \ path_to_file_thile, который содержит завершающий пробел.txt"
Причина этой проблемы похожа на причину 4. Однако, если вы используете типичный синтаксис Win32 для открытия файла, у которого в конце есть конечные пробелы или конечные периоды, конечные пробелы или периоды удаляются перед открытием фактического файла. Поэтому, если у вас есть два файла в одной папке с именами «AFile.txt» и «AFile.txt» (обратите внимание на пробел после имени файла), если вы пытаетесь открыть второй файл с помощью стандартных вызовов Win32, вы открываете первый файл вместо. Аналогично, если у вас есть файл с именем «» (пробел), и вы пытаетесь открыть его с помощью стандартных вызовов Win32, вместо этого вы открываете родительскую папку файла. В этой ситуации, если вы попытаетесь изменить настройки безопасности для этих файлов, вы либо не сможете сделать это, либо неожиданно измените настройки для других файлов. Если это происходит, вы можете подумать, что у вас есть разрешение на файл, который на самом деле имеет ограниченный ACL.

(Источник: http://support.microsoft.com/?kbid=320081)

39 голосов
/ 23 августа 2015

Я разместил это на SU, и я решил опубликовать это здесь. Это самый простой и быстрый и простой способ достичь этого. Я сейчас смеюсь над тем, насколько все просто.

  1. Установка WinRAR
  2. Выполните пошаговую процедуру из рисунков:
  3. enter image description here
  4. enter image description here
  5. enter image description here
  6. enter image description here

У меня сам был установлен WinRaR, поэтому я решил продемонстрировать обходной путь в нем.
Этот обходной путь также возможен при использовании 7zip.

Еще одна вещь, которую я должен упомянуть, это то, что, как представляется, проблема вызвана использованием проводника Windows, и любой другой файловый браузер (например, файловый браузер winrar, исследователи ftp и т. Д.) Будет обрабатывать эти файлы как обычно. Вы можете попробовать использовать любой файловый браузер и просто удалить эти файлы, но не архивировать их! Ура!

7 голосов
/ 08 мая 2012

Когда вы видите имя «a.», Но фактическое имя «a ..»

Попробуйте это:

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"
)
3 голосов
/ 10 марта 2017

Если у вас установлен git (вы можете получить его из здесь ), тогда это просто:

  1. Перейдите в место, где находится проблемная папка.
  2. Контекстное меню (правая кнопка мыши)> Git Bash Here.
  3. rm -rf Foldername./
3 голосов
/ 14 августа 2015

Я использовал " WinRar " Простой RAR, ZIP-процессор.Вы можете использовать любой вид редактора имен файлов.Просто откройте каталог, в котором находится ваш файл, в WinRar и выберите переименовать после щелчка правой кнопкой мыши файл / папку, которую вы хотите переименовать, и введите новое имя.

2 голосов
/ 02 ноября 2010

Попробуйте использовать программу unlocker для удаления файлов и папок, которые вы не можете удалить нормально.

0 голосов
/ 30 мая 2017

Используйте команду bash rm из Ubuntu в Windows 10

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...