Как удалить папку, имя которой заканчивается точкой ( "." )?

У меня есть несколько папок, созданных вредоносными программами, чье имя заканчивается точкой типа 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?

Ответ 2

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


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

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

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

Ответ 3

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

  • Установить WinRAR
  • Следуйте процедуре Step by Step из изображений:
  • введите описание изображения здесь
  • введите описание изображения здесь
  • введите описание изображения здесь
  • введите описание изображения здесь

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

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

Ответ 4

Когда вы видите, что имя "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"
)

Ответ 5

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

Ответ 6

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

Ответ 7

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

  • Перейдите к местоположению, где находится папка с проблемами.
  • Контекстное меню (правая кнопка мыши) > git Bash Здесь.
  • rm -rf Foldername./

Ответ 8

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