Jak wymusić generowanie krótkiej nazwy (8dot3)?

9

Mam problem z krótkimi nazwami okien systemu Windows. Czasami wydaje się, że krótkie nazwy nie są generowane dla „Program Files” i „Program Files (x86)”.

Sprawdziłem, czy jest włączone generowanie krótkich nazw, fsutil behavior query disable8dot3 C:co mówi mi, że ustawienie systemowe to 2(na wolumin), a wartość lokalna to 0(utwórz nazwy 8dot3).

Powinno to wyglądać mniej więcej tak (zwróć uwagę, że jest to niemiecka 32-bitowa kopia):

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

Jednak na innym komputerze (kopia 64-bitowa) wygląda to jak 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

Jak można zauważyć, brakuje krótkich nazw folderów programu.

Pytanie brzmi teraz, jak je wygenerować, ponieważ potrzebuję tych krótkich nazw dla kilku starszych skryptów. Próbowałem z fsutil file setshortname "Program Files" "PROGRA~1", ale to po prostu daje mi Access denied..

pgampe
źródło
Jedynym sposobem, w jaki wiem, jak Windows zamierza ponownie wygenerować krótką nazwę, jest skopiowanie katalogu i usunięcie oryginału. Oczywiście to nie zadziała dla Program Files. Nie można dostosować skryptów? Mam również nadzieję, że skrypt nie myśli, że Program Fileskatalog jest zawsze taki, PROGRA~1ponieważ w takim przypadku skrypt będzie działał w poważnych kłopotach, ponieważ krótkie nazwy nie zawsze są takie same. Możesz również poprosić o pomoc w aktualizacji skryptów do długiej nazwy (zamiast krótkiej nazwy) findfirst itp. (Jeśli w ogóle możliwe).
Rik
Zdaję sobie sprawę z problemów z krótkimi nazwami i sam nigdy nie napisałbym tych skryptów. Zawsze używałbym do tego zmiennych env ( %programfiles%). Zmiana nazwy rzeczywiście nie działa. Może mogę to zrobić offline? Może to być obejście.
pgampe
próbowałeś uruchomić komendę jako admin? Utwórz nazwę 8.3 dla istniejącego katalogu
phuclv
Pewnie. To nie działało.
pgampe

Odpowiedzi:

5

Tak jak powiedziałem w moim komentarzu ... Jedynym sposobem, w jaki wiem, jak Windows zamierza ponownie wygenerować krótką nazwę, jest skopiowanie katalogu i usunięcie oryginału. (nie można tego zrobić w katalogu „Program Files”).

Najlepiej byłoby zmienić skrypt, aby używał długich nazw plików i folderów. Jeśli skrypt użyje PROGRA~1go, będzie miał kłopoty z instalacjami, w których dysk został sklonowany w sposób, w jaki skopiowano katalogi. Na przykład, jeśli ProgramDatazostanie skopiowany najpierw na dysk, zostanie nazwany PROGRA~1i Program Filesbędzie nazwany PROGRA~2.

Istnieje opcja, aby skrypty działały na razie :

Możesz utworzyć połączenie katalogu od PROGRA~1do C:\Program Files. W ten sposób skrypty działają i masz czas na ich zmianę.

mklink /J "C:\PROGRA~1" "C:\Program Files"

Wyjście 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
źródło
Dobry pomysł, aby użyć skoku do katalogu :)
pgampe
Czy zmiany są wprowadzane na mklinkstałe, czy działają po prostu w uruchamianym skrypcie wsadowym? Niestety nie mam wystarczających informacji na temat dowiązań symbolicznych i skrzyżowań.
Alireza Mohamadi
@AlirezaMohamadi Wprowadzone zmiany mklinksą trwałe. Podobnie jak mkdir.
Rik
9

Aby zdefiniować nazwy skrócone (8dot3) dla plików programu, wykonaj następujące czynności:

  1. Restart komputera
  2. po uruchomieniu uruchom w trybie awaryjnym z poleceniem cmd (F8 na moim komputerze)
  3. Zaloguj sie
  4. z wiersza polecenia cmd wprowadź następujące polecenia cmds

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

Powinieneś teraz zobaczyć krótką nazwę zdefiniowaną dla plików programu. Jeśli chcesz, ustaw zachowanie 8dot3name z powrotem na oryginalne ustawienie zwrócone przez zapytanie cmd.

monkeyfncoconut
źródło
2
FWIW- W tym celu nie musiałem restartować komputera. Ponadto możesz selektywnie włączać / wyłączać 8.3 na różnych dyskach. Lokalizacja rejestru dla wszystkich tych ustawień to HKLM: \ System \ CurrentControlSet \ Control \ FileSystem \ Ntfs *. Zobacz support.microsoft.com/en-us/kb/121007
Coruscate5,
Tak, po prostu zostałem tam, gdzie byłem i zrobiłem:
Mike Mounier