Как Windows разрешает короткие имена (8.3) в полные имена - PullRequest
4 голосов
/ 24 мая 2010

У меня есть компьютер под управлением 64-разрядной Windows Server 2003. Есть Java-приложение, которое использует cmd-файл в качестве средства запуска. Лаунчер делает это

SET JAVA_HOME= C:\Progra~1\Java

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

Java установлена ​​в C: \ Program Files \ Java. Так как это x64 windows, он также имеет папку C: \ Program Files (x86) \.

Теперь актуальная проблема заключается в том, что время от времени это приложение не запускается, потому что не может найти Java.

Итак, вопрос в том, что Windows делает для устранения такой неоднозначности? На основании чего он принимает решение о том, какую папку выбрать?

Ответы [ 4 ]

1 голос
/ 24 мая 2010

Связь между длинными и короткими именами производится при создании каталога. 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».

НТН

1 голос
/ 24 мая 2010

Простой ответ заключается в том, что Windows хранит как короткие, так и длинные имена файлов.

Он сделал это еще тогда, когда vfat (поверх FAT16) был представлен в Windows 95, продолжен в FAT32 и все еще около в NTFS:

При сохранении файла с длинным файлом имя для диска NTFS, NTFS создает, по умолчанию второй каталог файлов запись с коротким именем файла в соответствии с 8.3 конвенцией.

(Вы можете отключить 8.3 имен в NTFS ).

Примечание: вы можете увидеть, какие короткие имена файлов есть в окне cmd.exe, запустив dir /x (спасибо cHao за указание на это).

0 голосов
/ 24 мая 2010

Всякий раз, когда файл создается в файловой системе NTFS, ОС может (и до Windows 7/2008, как правило, делает) также создавать для него короткое имя.Это не обязательно, и имя на самом деле может быть любым, но если обычное имя еще не 8.3, короткое имя обычно представляет собой первые 6 слов-символов имени файла, тильду (~) и цифру (1 дляпервый файл с теми же первыми символами, 2 для второго и т. д.), точка и первые 3 буквы расширения.(Если расширение отсутствует, то обычно нет и точки.)

Число не связано с именем файла в противном случае, то есть «программные файлы» могут стать «progra ~ 1» или «progra ~ 2"или" progr ~ 50 ", в зависимости от того, как называются другие файлы / каталоги в том же месте и (в основном), когда они были созданы.Но как только имя установлено, оно редко изменяется, если файл не переименован.

0 голосов
/ 24 мая 2010

Кровавые (запатентованные) подробности также описаны на этой странице Википедии .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...