Windows 资源管理器 - 为什么文件名中有时不允许使用字符 @?

Windows 资源管理器 - 为什么文件名中有时不允许使用字符 @?

我知道文件和文件夹名称中有很多受限字符和特殊字符不能使用,否则它们以后会引起麻烦。

例如,在名字末尾加一个点将导致其消失。

Explorer 本身有更多限制,例如,文件名开头的点很难放置。

好的,但是 at-sign 有什么问题@!?
我没有看到任何地方有关于它的限制,现在也找不到它。

看:

1) 打开 Windows 资源管理器并创建一个名为的文件或文件夹1,1
2) 按 F2 并将其重命名为@1,1
3) 看到了吗?新名称被取消了。

我的问题是:为什么?

我在 XP、Win7 和 Win10 上测试了这个“功能”。WinXP
中有趣的是,重命名0,0@0,0实际上会将其重命名为@0

看起来这是 Explorer 的内部行为,因为在 CMD 控制台中这样做是完全没问题的cd.>"@1,1"

答案1

我不知道为什么 Explorer 禁止这样的重命名,但这可能与本地化功能有关。

Explorer 的各个部分都使用@<DllName>,<ResourceID>动态加载本地化文本的语法 - 请参阅注册字符串重定向(请注意,资源 ID 始终是十进制数,通常为负数。)

  • 例如,注册表中 .lnk 快捷方式的描述是@shell32.dll,-4153,这意味着“从文件 shell32.dll 加载 ID 为 -4153 的字符串”。由于 DLL 文件可以为每种支持的语言提供单独的资源表,因此生成的描述将被翻译为 Windows 所设置的任何显示语言。

  • 类似地,您的桌面;文档;图片;...目录有一个隐藏desktop.ini文件,其中包含:

    [.ShellClassInfo]
    LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21769
    IconResource=%SystemRoot%\system32\imageres.dll,-183
    

    当资源管理器看到此文件时,它不仅会将文件夹显示为“桌面”,还会显示翻译的名称。

仅在实际文件/目录名称中使用重定向语法不会产生任何效果,但我猜测,禁止这样做是为了防止程序以某种方式混淆“真实”名称和“显示”名称时出现各种错误。(例如,如果您将目录命名为@shell32.dll,-21769,则有缺陷的程序可能会继续尝试访问Desktop。这甚至可能会造成安全问题。)

因此,这将类似于 Windows 允许但 Explorer 不允许的各种其他名称(例如,.foo对于 Unixen 来说,这是一个常规的“隐藏文件”,但可能会被某些 Windows 程序误认为是无名(仅有扩展名)的文件)。

相关内容