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
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
?
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
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
Tags command-line windows