我有一台运行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如何解决这种歧义?根据决定选择哪个文件夹做出决定?
答案 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”,具体取决于其他文件/目录制作相同的位置(大多数时候)。但是一旦设置了名称,除非重命名文件,否则很少更改。