我有一些恶意软件创建的文件夹,其名称以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是什么?
答案 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的文件的权限。
答案 2 :(得分:38)
我在SU上发布了这个,我决定在这里发布。它是实现这一目标的最简单,最快速,最简单的方法。我现在嘲笑它有多简单。
我自己安装了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获得),那么就像这样简单:
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命令