我对 Windows 短名称有疑问。有时似乎无法为“Program Files”和“Program Files (x86)”生成短名称。
我验证了已启用短名称生成,fsutil behavior query disable8dot3 C:
它告诉我系统范围设置是2
(每个卷)并且本地值是0
(创建 8dot3 名称)。
它看起来大致像这样(请注意,它是德语 32 位副本):
C:\>dir /a /x
Verzeichnis von C:\
21.12.2011 00:17 <DIR> $Recycle.Bin
14.07.2009 05:53 <VERBINDUNG> DOCUME~1 Documents and Settings [C:\Users]
09.01.2011 15:35 <VERBINDUNG> DOKUME~1 Dokumente und Einstellungen [C:Users]
27.11.2013 15:11 2.147.016.704 pagefile.sys
14.07.2009 03:37 <DIR> PerfLogs
26.11.2013 17:31 <DIR> PROGRA~1 Program Files
08.11.2013 21:58 <DIR> PROGRA~2 ProgramData
09.01.2011 15:35 <VERBINDUNG> PROGRA~3 Programme [C:\Program Files]
09.01.2011 15:35 <DIR> Recovery
26.11.2013 17:40 <DIR> SYSTEM~1 System Volume Information
23.01.2011 15:00 <DIR> Temp
11.01.2011 20:56 <DIR> Users
08.11.2013 14:53 <DIR> Windows
但是在另一台机器(64位副本)上,这看起来像 C:>dir /a /x
Verzeichnis von C:\
21.12.2011 00:17 <DIR> $Recycle.Bin
14.07.2009 05:53 <VERBINDUNG> DOCUME~1 Documents and Settings [C:\Users]
09.01.2011 15:35 <VERBINDUNG> DOKUME~1 Dokumente und Einstellungen [C:Users]
27.11.2013 15:11 2.147.016.704 pagefile.sys
14.07.2009 03:37 <DIR> PerfLogs
26.11.2013 17:31 <DIR> Program Files
26.11.2013 17:31 <DIR> Program Files (x86)
08.11.2013 21:58 <DIR> ProgramData
09.01.2011 15:35 <DIR> Recovery
26.11.2013 17:40 <DIR> SYSTEM~1 System Volume Information
23.01.2011 15:00 <DIR> Temp
11.01.2011 20:56 <DIR> Users
08.11.2013 14:53 <DIR> Windows
您可能已经注意到,程序文件夹缺少简称。
现在的问题是如何生成它们,因为我需要一些较旧的脚本的短名称。我尝试使用fsutil file setshortname "Program Files" "PROGRA~1"
,但这只会给我Access denied.
。
答案1
就像我在评论中所说的那样...我知道 Windows 将如何重新生成短名称的唯一方法是复制目录并删除原始目录。(“Program Files”目录不可行。)
最好将脚本更改为使用长文件名和文件夹名。如果脚本使用,PROGRA~1
它将在安装中遇到麻烦,因为驱动器是以目录被复制回来的方式克隆的。例如,如果ProgramData
首先将复制到磁盘上,它将被命名为PROGRA~1
,并且Program Files
将被命名为PROGRA~2
。
现在有一个选项可以让脚本继续运行:
您可以创建一个目錄連接从PROGRA~1
到C:\Program Files
。这样,脚本就可以继续工作,而您也有时间进行更改。
mklink /J "C:\PROGRA~1" "C:\Program Files"
输出mklink /?
:
Creates a symbolic link.
MKLINK [[/D] | [/H] | [/J]] Link Target
/D Creates a directory symbolic link. Default is a file
symbolic link.
/H Creates a hard link instead of a symbolic link.
/J Creates a Directory Junction.
Link specifies the new symbolic link name.
Target specifies the path (relative or absolute) that the new link
refers to.
答案2
要为程序文件定义短名称(8dot3),请执行以下操作:
- 重启计算机
- 启动时使用 cmd 提示符以安全模式启动(我的电脑上是 F8)
- 登录
在 cmd 提示符下输入以下命令
fsutil 8dot3name query fsutil behavior set disable8dot3 0 fsutil file setshortname "Program Files" PROGRA~1 dir /X
您现在应该可以看到为程序文件定义的短名称。如果您愿意,可以将 8dot3name 行为重新设置为查询命令返回的原始设置。