Como forçar a geração de nome abreviado (8dot3)?

9

Estou com um problema com os nomes abreviados do windows. Às vezes, os nomes abreviados não parecem ser gerados para "Arquivos de programas" e "Arquivos de programas (x86)".

Eu verifiquei que a geração de nomes curtos está ativada, o fsutil behavior query disable8dot3 C:que indica que a configuração do sistema é 2(por volume) e o valor local é 0(crie nomes de 8 pontos 3).

Deve ser mais ou menos assim (observe que é uma cópia alemã de 32 bits):

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

No entanto, em outra máquina (cópia de 64 bits), isso se parece com 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

Como você deve ter notado, os nomes abreviados estão ausentes nas pastas do programa.

A questão agora é como gerá-los, porque eu preciso desses nomes abreviados para alguns scripts mais antigos. Eu tentei com fsutil file setshortname "Program Files" "PROGRA~1", mas isso só me dá Access denied..

pgampe
fonte
A única maneira de saber como o Windows irá gerar novamente o nome abreviado é copiar o diretório e excluir o original. Claro que isso não vai funcionar para o Program Files. Não é possível ajustar os scripts? Além disso, espero que o script não pense que o Program Filesdiretório-é sempre PROGRA~1porque, se esse for o caso, seu script será executado com sérios problemas eventualmente, porque os nomes abreviados nem sempre são os mesmos. Você também pode pedir ajuda para atualizar os scripts para o nome longo (em vez do nome curto), findfirst etc. (se possível).
Rik
Estou ciente dos problemas com nomes abreviados e nunca escreveria esses scripts. Eu sempre usaria os envários para isso ( %programfiles%). Renomear realmente não funciona. Talvez eu possa fazer isso offline. Pode ser uma solução alternativa.
Pgampe
você tentou executar o comando como administrador? Criar nome 8.3 para um diretório existente
phuclv
Certo. Não funcionou.
Pgampe

Respostas:

5

Como eu disse no meu comentário ... A única maneira de saber como o Windows irá gerar novamente o nome abreviado é copiar o diretório e excluir o original. (não é possível para o diretório "Arquivos de Programas".)

Seria melhor alterar o script para usar nomes longos de arquivos e pastas. Se o script usar, PROGRA~1ele terá problemas com instalações nas quais a unidade foi clonada de uma maneira que os diretórios foram copiados novamente. Por exemplo, se ProgramDatafor copiado primeiro no disco, ele será nomeado PROGRA~1e Program Filesserá nomeado PROGRA~2.

Há uma opção para manter os scripts funcionando por enquanto :

Você pode criar uma junção de diretório de PROGRA~1para C:\Program Files. Dessa forma, os scripts continuam funcionando e você tem tempo para alterá-los.

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

Saída de 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
fonte
Boa idéia usar um salto diretório :)
pgampe
As alterações são feitas por mklinkpermanente ou apenas funcionam no script em lote que está sendo executado? Desculpe, não tenho informações suficientes sobre links simbólicos e junções.
Alireza Mohamadi
@AlirezaMohamadi As alterações feitas com mklinksão permanentes. Assim como mkdir.
Rik
9

Para definir nomes curtos (8dot3) para arquivos de programas, faça o seguinte:

  1. Reinicialização do computador
  2. ao iniciar o boot no modo de segurança com o prompt do cmd (F8 no meu computador)
  3. Conecte-se
  4. no prompt do cmd, digite os seguintes cmds

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

Agora você deve ver o nome abreviado definido para os arquivos de programa. Se desejar, defina o comportamento 8dot3name de volta à configuração original retornada pelo cmd da consulta.

monkeyfncoconut
fonte
2
FWIW- Eu não precisei reiniciar meu computador para nada disso. Além disso, você pode ativar / desativar seletivamente o 8.3 em unidades diferentes. O local do registro para todas essas configurações é HKLM: \ System \ CurrentControlSet \ Control \ FileSystem \ Ntfs *. Veja support.microsoft.com/en-us/kb/121007
Coruscate5
Sim, eu apenas fiquei onde estava e:
Mike Mounier 15/02