Windows如何将短名称(8.3)解析为全名

时间:2010-05-24 13:54:37

标签: java windows

我有一台运行64位Windows Server 2003的PC。有一个使用cmd文件作为启动器的java应用程序。启动器执行此操作

SET JAVA_HOME= C:\Progra~1\Java

"%JAVA_HOME%\bin\java" [java program execution line]

Java安装在C:\ Program Files \ Java中。由于它是一个x64窗口,它还有C:\ Program Files(x86)\文件夹。

现在实际问题是该应用程序有时无法启动,因为它无法找到java。

所以问题是Windows如何解决这种歧义?根据决定选择哪个文件夹做出决定?

4 个答案:

答案 0 :(得分:1)

简单的答案是Windows存储短文件名和长文件名。

当用Windows 95引入vfat(在FAT16之上),在FAT32中继续,在NTFS中为still around时,它做到了这一点:

  

使用长文件保存文件时   命名为NTFS驱动器,NTFS创建,   默认情况下,第二个文件目录   具有短文件名的条目   符合8.3公约。

(你可以disable 8.3 names on NTFS)。

备注:您可以通过运行dir /x来查看cmd.exe窗口中的短文件名(感谢cHao指出这一点)。

答案 1 :(得分:1)

创建目录时会创建长名称和短名称之间的关联。 Windows在包含8.3名称的目录中创建“短路径条目”。 因此,短名称和长名称之间的关联是永久性的,除非您修改目录(重命名,删除,重新创建),否则不会更改。

这是我机器上的一个例子(Windows 7)

C:\>mkdir temp

C:\>cd temp

C:\temp>dir
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: 0A74-FE30

 Directorio de C:\temp

24/05/2010  12:14 p.m.    <DIR>          .
24/05/2010  12:14 p.m.    <DIR>          ..
               0 archivos              0 bytes
               2 dirs   6.090.723.328 bytes libres

C:\temp>mkdir "Program Files"

C:\temp>mkdir "Program Files (x86)"

C:\temp>mkdir "Program Files (x86_64)"

C:\temp>dir /x
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: 0A74-FE30

 Directorio de C:\temp

24/05/2010  12:15 p.m.    <DIR>                       .
24/05/2010  12:15 p.m.    <DIR>                       ..
24/05/2010  12:14 p.m.    <DIR>          PROGRA~1     Program Files
24/05/2010  12:14 p.m.    <DIR>          PROGRA~2     Program Files (x86)
24/05/2010  12:15 p.m.    <DIR>          PROGRA~3     Program Files (x86_64)
               0 archivos              0 bytes
               5 dirs   6.090.723.328 bytes libres

C:\temp>rmdir "Program Files"

C:\temp>mkdir "Program Files (new)"

C:\temp>dir /x
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: 0A74-FE30

 Directorio de C:\temp

24/05/2010  12:15 p.m.    <DIR>                       .
24/05/2010  12:15 p.m.    <DIR>                       ..
24/05/2010  12:15 p.m.    <DIR>          PROGRA~1     Program Files (new)
24/05/2010  12:14 p.m.    <DIR>          PROGRA~2     Program Files (x86)
24/05/2010  12:15 p.m.    <DIR>          PROGRA~3     Program Files (x86_64)
               0 archivos              0 bytes
               5 dirs   6.090.723.328 bytes libres

C:\temp>rmdir "Program Files (x86)"

C:\temp>dir /x
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: 0A74-FE30

 Directorio de C:\temp

24/05/2010  12:15 p.m.    <DIR>                       .
24/05/2010  12:15 p.m.    <DIR>                       ..
24/05/2010  12:15 p.m.    <DIR>          PROGRA~1     Program Files (new)
24/05/2010  12:15 p.m.    <DIR>          PROGRA~3     Program Files (x86_64)
               0 archivos              0 bytes
               4 dirs   6.090.723.328 bytes libres

正如您所看到的,当我删除原始目录时,名称PROGRA~1被“重用”,并创建一个新名称,当缩短时,该名称与“PROGRA”前缀相匹配。

HTH

答案 2 :(得分:0)

Wikipedia page中也描述了血腥(专利侵扰)细节。

答案 3 :(得分:0)

每当在NTFS文件系统上创建文件时,操作系统可以(并且在Windows 7/2008之前,通常也会)为它创建一个短名称。它不是必需的,名称实际上可以是任何东西,但如果常规名称不是8.3,则短名称通常是文件名的前6个字符,代字号(〜)和数字(1代表第一个文件具有相同的第一个字符,第二个文件具有第二个,等等),一个点和扩展名的前3个字母。 (如果没有扩展名,通常也没有点。)

该数字与文件名无关,这意味着“程序文件”可以变为“progra~1”或“progra~2”或“progr~50”,具体取决于其他文件/目录制作相同的位置(大多数时候)。但是一旦设置了名称,除非重命名文件,否则很少更改。