我有一堆文件夹,当我尝试浏览它们时,会显示"<directory> refers to a location that is unavailable"
。在进程监控,我看到实际的错误代码是NAME_NOT_FOUND
--但它们确实存在。
chkdsk
在文件系统中未发现任何错误。- 它们既不是连接点也不是符号链接(通过安装链接外壳扩展)
我注意到这些名字有一个共同的特征:
- 它们最后都有一个点
- 过去,我也遇到过与图片中名称损坏的文件/目录相同的情况:
这里发生了什么事?我该如何解决这个问题?
如何在 Windows 7 中删除以点结尾的文件?提供方法删除它,但这是不能接受的,因为我需要它的内容。
del
与该问题中所建议的不同,rename "<directory>" "<smth else>"
产生相同的结果"File not found"
。- 两者都
\\?\<path>
不起作用(同样的错误)。
答案1
Windows API 在将路径传递给内核之前会对其进行“预处理”。关于此内容的文档不太详细:相反,MSDN 仅列出了网络限制。尤其:
不要以空格或句点结尾文件或目录名称。尽管底层文件系统可能支持此类名称,但 Windows shell 和用户界面不支持。
MAX_PATH
解除限制的Unicode I/O API似乎也跳过了那个预处理。
因此,有两种修复方法:
使用在底层使用 Unicode I/O API 的程序。选项包括:
- Cygwin 实用程序:
mv <bogus_name> <new_name>
Scripting.FileSystemObject
- 一些归档程序,例如 WinRAR/7-Zip(它们的 GUI 可能允许对常规文件/目录进行重命名)
- Cygwin 实用程序:
使用 8.3 名称访问文件/目录:
>dir /x <...> <DIR> 58B0~1 Для П.П. >rename 58B0~1 new_name
使用“本机路径”——\\?\<full path>
在这里没有帮助,因为对于某些cmd
内置函数来说——至少dir
——rename
这些路径仍然需要进行预处理:
>dir "\\?\C:\Users\Me\Для П.П."
<...>
Directory of \\?\C:\Users\Me\Для П.П
File Not Found
(请注意输出中缺少的结束点)。