如何删除名称以点(“。”)结尾的文件夹?

时间:2010-11-02 07:44:53

标签: windows winapi file-io

我有一些恶意软件创建的文件夹,其名称以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.\"

删除

rd /q /s命令调用的Windows系统API是什么?

10 个答案:

答案 0 :(得分:122)

Here's a solution to this problem

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

答案 1 :(得分:54)

<强>解决方案: 当您调用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

答案 2 :(得分:38)

我在SU上发布了这个,我决定在这里发布。它是实现这一目标的最简单,最快速,最简单的方法。我现在嘲笑它有多简单。

  1. 安装WinRAR
  2. 按照图片中的分步操作:
  3. enter image description here
  4. enter image description here
  5. enter image description here
  6. enter image description here
  7. 我自己安装了WinRaR,所以我决定在其中演示解决方法 使用7zip也可以实现此解决方法。

    我应该提到的另一件事是,因为看起来问题是由于使用Windows资源管理器和任何其他文件浏览器(如winrar文件浏览器本身,ftp资源管理器等)会将此文件视为正常。
    您可以尝试使用任何文件浏览器,只需删除这些文件,而不是为了存档它们! 干杯!

答案 3 :(得分:7)

当您看到名称是“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"
)

答案 4 :(得分:3)

我使用了“WinRar”一个简单的RAR,ZIP处理器。您可以使用任何类型的文件名编辑器。只需打开文件进入WinRar的目录,右键单击要重命名的文件/文件夹后选择重命名,然后填写新名称。

答案 5 :(得分:3)

如果你安装了git(你可以从here获得),那么就像这样简单:

  1. 导航到有问题的文件夹所在的位置。
  2. 上下文菜单(鼠标右键)&gt; Git Bash Here。
  3. rm -rf Foldername./

答案 6 :(得分:2)

尝试使用unlocker程序删除无法正常删除的文件和文件夹。

答案 7 :(得分:1)

如果您需要保留数据,您还可以使用 \\?\ 技巧来重命名文件夹。

ren "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder." "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder"

如果您需要了解文件夹中的内容或数据是否重要,这是一个理想的解决方案。

这适用于命令提示符和 PowerShell。

答案 8 :(得分:0)

如果您也希望将文件中的选项保留在bash中。
您将需要Windows Subsystem for Linux软件包(我已安装Ubuntu)

保留文件。打开命令提示符,然后使用cd转到文件或文件夹所在的位置。
现在输入“ bash
这将在提示中打开bash。现在输入mv '[folder or file you want to move]' '[new name (can include path)]'(关于mv的更多信息,因此,如果您想阅读所有选项,请使用'man mv',这将打开其手册页(然后使用q返回bash))
mv命令是move的缩写,但它具有重命名功能的辅助功能。
同样在bash中使用“单引号”而不是正常的“双引号”,因为bash期望使用“单引号”。

这里是一个例子。假设您的文件夹位于data 1.中,名为“ c:\users”(因此错误文件夹的完整路径为c:\users\data 1.
1.使用任何方法打开命令提示符
2.输入cd c:\users
3.现在键入bash,这会将bash加载到您以前所在的文件夹中
4.最后输入mv 'data 1.' 'data 1'
5.现在可以访问该文件夹了,您可以选择删除它。

答案 9 :(得分:-1)

在Windows 10上使用Ubuntu的bash rm命令