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

ale*_*lim 6 windows windows-explorer filenames

我知道文件和文件夹名称中的许多限制和特殊字符无法使用,否则会在以后造成麻烦。

例如,在名称末尾放置一个点会使其消失。

资源管理器本身有更多限制,例如文件名开头的点很难放置。

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

看:

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

我的问题是:为什么?

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

看起来这是内部资源管理器的行为,因为在 CMD 控制台中完全可以做到 cd.>"@1,1"

use*_*686 8

我不知道为什么 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
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 天啊,真的!我怎么没想到呢。嘿,现在我实际上尝试在 WinXP 资源管理器中将 `test` _directory_ 重命名为 `@shell32.dll,-21769`,它神奇地将其“重命名”为视觉名称 `Рабочий стол`(俄语中的“桌面”),其中包含 ` desktop.ini` 与 `LocalizedResourceName=@shell32.dll,-21769` 行。当我尝试重命名 _file_ `test` 时 - Explorer 使用 `[LocalizedFileNames]` 和 `test=@shell32.dll,-21769` 在这里创建了 desktop.ini。(此外,“本地化名称”本身可能会让新手用户感到困惑,并且可能被恶意软件使用)。 (3认同)