我的 Windows 机器上有几千个文件(14,000 个),所有文件都命名为.TARDIRPERMS.
我无法删除:
我可以在 Windows 资源管理器和命令行中看到它们,但都不能删除这些文件。
显然我不知道原因,但一些可能相关的有趣点是:
- 这是一个 ReFS 卷(意思是我不能
chkdsk
) - 文件以句点开头和结尾(即U+002E FULL STOP)
- 我试过删除父(和父父)文件夹 - 结果相同
- 我试过了
del /S /F /Q *
- 结果相同 - 我试过了
del ".tardirperms."
- 结果相同 - 我试过了
del "\?.TARDIRPERMS."
- 结果相同 - 我试过了
rd /s "\?UTZOO"
- 结果相同 - 我试过
PS D:\Torrents> Remove-Item
\?\D:\Torrents\UTZOO-Recurse
- 结果相同 - 我试过了
del *.tardirperms.
- 结果相同 - 我试过了
del *.tardi*
- 结果相同
精简版
>del /S /Q "\\?\D:\Torrents\UTZOO\*"
对于文件 I/O,路径字符串的\\?\前缀告诉 Windows API 禁用所有字符串解析并将其后面的字符串直接发送到文件系统。
长版
文件名
.TARDIRPERMS.
是有效的 NT 文件名,但不是有效的 Win32 文件名。您可以告诉 Win32 函数忽略正常的 Win32 限制,并将文件名按原样传递给相应的底层NtCreateFile函数,方法是在文件名前加上\\?\
:D:\Torrents\UTZOO\.TARDIRPERMS.
\\?\D:\Torrents\UTZOO\.TARDIRPERMS.
Microsoft 在文章标题中对您无法删除文件的各种原因进行了一般性总结。您无法删除 NTFS 文件系统卷上的文件或文件夹。
我感兴趣的是原因#6:
所以诀窍是:
在哪里
/S
:从所有子目录中删除指定文件。/Q
:安静模式,不询问是否可以删除全局通配符并且使用
\\?\
前缀告诉 Win32 绕过在创建或删除文件时进行的典型 Win32 名称检查。