Como os dígitos após ~ são atribuídos nos nomes de arquivos curtos do Windows?

1

O Windows ainda usa ~ para encurtar arquivos e diretórios com nomes longos. Você pode ver o nome "curto" digitando dir /X no prompt de comando.

Minha pergunta é como os dígitos são atribuídos aos nomes dos arquivos curtos? Não parece ser alfabético nem parece funcionar pelo tempo de criação de arquivos.

Por exemplo:

Eu crio um novo arquivo de texto: C:\reallylongfilenameB.txt

Em seguida, corro dir /X e vejo que o nome abreviado de fileB é REALLY~1.TXT

Eu crio um segundo arquivo de texto: C:\reallylongfilenameA.txt

Em seguida, corro dir /X e vejo que o nome abreviado de fileA é REALLY~2.TXT

Em seguida, defino o relógio de volta um dia, excluo C:\reallylongfilenameA.txt e, em seguida, o re-crie, essencialmente fazendo a data de criação de C:\reallylongfilenameA.txt 1 dia antes de C:\reallylongfilenameB.txt .

Eu corro dir /X e C:\reallylongfilenameA.txt nome curto ainda é REALLY~2.TXT .

Dado este exemplo, existe alguma maneira de tornar o nome abreviado de C:\reallylongfilenameA.txt be REALLY~1.TXT ?

    
por FGreg 05.12.2013 / 16:44

2 respostas

3

Pelo que entendi, o NTFS atribui automaticamente nomes de arquivos 8.3 persistentes na criação. Quando você executa o dir / X, ele não está encurtando nomes de arquivos on-the-fly, ele está procurando os nomes curtos pré-atribuídos.

Fonte: link

    
por 05.12.2013 / 17:24
6

Como Jack apontou em sua resposta, o nome abreviado é atribuído quando o arquivo é criado (ou renomeado ou movido). O valor depende tanto do nome de arquivo longo, quanto de outros nomes curtos existentes.

O algoritmo exato de atribuição de nomes curtos é não documentado, e não há garantia de que o algoritmo permaneça constante entre as versões do Windows ou mesmo entre os diferentes formatos do sistema de armazenamento. Você não deve escrever código que seja dependente de qualquer algoritmo específico de atribuição de nomes curtos.

Existem limitações de design e erros que surgem de nomes de arquivos curtos. Um exemplo de limitação de design é del *.txt pode excluir um arquivo chamado something.txt2 porque a extensão do nome abreviado provavelmente será .txt e as máscaras de origem analisam os nomes longos e curtos. Veja a seção intitulada "BUG - nomes de arquivos curtos 8.3 podem quebrar as opções / D e / S " em Quais são os recursos e limitações não documentados do comando Windows FINDSTR? para obter um exemplo de um bug de nomes curtos.

Os volumes NTFS podem ter nomes de arquivo curtos desabilitados (nomes curtos que existiam antes de desabilitá-los permanecerão). Muitas pessoas (organizações) desabilitam nomes curtos em seus sistemas devido aos problemas que podem causar.

Atualizar

Aqui está um argumento definitivo de por que é uma perda de tempo tentar estabelecer o algoritmo de como os nomes de arquivos curtos são gerados - O FSUTIL permite especificar qualquer nome curto que você deseja para um arquivo, como desde que ainda não exista nessa pasta.

Aqui está a documentação de ajuda relevante do FSUTIL

C:\test>fsutil file
---- FILE Commands Supported ----

findbysid               Find a file by security identifier
queryallocranges        Query the allocated ranges for a file
setshortname            Set the short name for a file
setvaliddata            Set the valid data length for a file
setzerodata             Set the zero data for a file
createnew               Creates a new file of a specified size
queryfileid             Queries the file ID of the specified file
queryfilenamebyid       Displays a random link name for the file ID

C:\test>fsutil file setshortname /?
Usage : fsutil file setshortname <filename> <shortname>
   Eg : fsutil file setshortname C:\testfile.txt testfile
    
por 05.12.2013 / 18:17