Как заставить поколение коротких имен (8dot3)?

9

У меня проблема с именами окон 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..

pgampe
источник
Единственный способ узнать, как Windows собирается сгенерировать короткое имя, - это скопировать каталог и удалить оригинал. Конечно, это не сработает Program Files. Не возможно настроить скрипты? Кроме того, я надеюсь, что сценарий не думает, что Program Files-directory - это всегда, PROGRA~1потому что в этом случае ваш сценарий в конечном итоге столкнется с серьезными проблемами, потому что короткие имена не всегда совпадают. Вы также можете обратиться за помощью в обновлении скриптов до длинного имени (вместо короткого имени) findfirst и т. Д. (Если это возможно).
Рик
Мне известны проблемы с короткими именами, и я бы никогда не написал эти сценарии сам. Я бы всегда использовал env vars для этого ( %programfiles%). Переименование действительно не работает. Может быть, я могу сделать это из форума? Может быть обходным путем.
pgampe
Вы пытались запустить команду от имени администратора? Создать 8.3 имя для существующего каталога
phuclv
Конечно. Это не работает.
pgampe

Ответы:

5

Как я уже сказал в своем комментарии ... Единственный способ узнать, как 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.
Rik
источник
Хорошая идея использовать каталог прыгать :)
pgampe
Изменения сделаны mklinkпостоянными или они работают в пакетном скрипте, который выполняется? Извините, у меня недостаточно информации о символических ссылках и соединениях.
Алиреза Мохамади
@AlirezaMohamadi Изменения, сделанные с помощью mklinkявляются постоянными. Так же , как mkdir.
Рик
9

Чтобы определить короткие имена (8dot3) для файлов Программы, сделайте следующее:

  1. Перезагрузить компьютер
  2. при загрузке в безопасном режиме с приглашением cmd (F8 на моем компьютере)
  3. Авторизоваться
  4. из командной строки введите следующие команды

    fsutil 8dot3name query
    fsutil behavior set disable8dot3 0
    fsutil file setshortname "Program Files" PROGRA~1
    dir /X
    

Теперь вы должны увидеть короткое имя, определенное для программных файлов. Если вы хотите, установите поведение 8dot3name обратно в исходное значение, которое было возвращено запросом cmd.

monkeyfncoconut
источник
2
FWIW - мне не нужно было перезагружать компьютер для всего этого. Также вы можете выборочно включать / отключать 8.3 на разных дисках. Расположение реестра для всех этих параметров: HKLM: \ System \ CurrentControlSet \ Control \ FileSystem \ Ntfs *. См support.microsoft.com/en-us/kb/121007
Coruscate5
Да, я просто остался там, где был и сделал:
Майк