¿Cómo se asignan los dígitos después de ~ en los nombres de archivos cortos de Windows?

¿Cómo se asignan los dígitos después de ~ en los nombres de archivos cortos de Windows?

Windows todavía lo utiliza ~para acortar archivos y directorios con nombres largos. Puede ver el nombre "corto" escribiendo dir /Xen el símbolo del sistema.

Mi pregunta es ¿cómo se asignan los dígitos a los nombres cortos de archivos? No parece ser alfabético ni parece funcionar según el momento de creación del archivo.

Por ejemplo:

Creo un nuevo archivo de texto:C:\reallylongfilenameB.txt

Luego corro dir /Xy veo que el nombre corto de fileB esREALLY~1.TXT

Creo un segundo archivo de texto:C:\reallylongfilenameA.txt

Luego corro dir /Xy veo que el nombre corto del archivo A esREALLY~2.TXT

Luego atraso el reloj un día, lo elimino C:\reallylongfilenameA.txty luego lo vuelvo a crear, esencialmente haciendo que la fecha de creación sea C:\reallylongfilenameA.txt1 día antes C:\reallylongfilenameB.txt.

Corro dir /Xy C:\reallylongfilenameA.txtel nombre corto sigue siendo REALLY~2.TXT.

Dado este ejemplo, ¿hay alguna forma de hacer que el nombre corto C:\reallylongfilenameA.txtsea REALLY~1.TXT?

Respuesta1

Según tengo entendido, NTFS asigna automáticamente nombres de archivos persistentes 8.3 al momento de su creación. Cuando ejecuta dir /X, no acorta los nombres de archivos sobre la marcha, sino que busca los nombres cortos preasignados.

Fuente:http://en.wikipedia.org/wiki/8.3_filename

Respuesta2

Como Jack señaló en su respuesta, el nombre corto se asigna cuando se crea (o se cambia el nombre o se mueve) el archivo. El valor depende tanto del nombre largo del archivo como de otros nombres cortos que ya existen.

El algoritmo exacto de asignación de nombres cortos no está documentado y no hay garantía de que el algoritmo permanezca constante entre las versiones de Windows, o incluso entre diferentes formatos de sistemas de almacenamiento. No debe escribir código que dependa de ningún algoritmo de asignación de nombres cortos en particular.

Existen limitaciones de diseño y errores que surgen de los nombres de archivos cortos. Un ejemplo de limitación de diseño es del *.txtla posibilidad de eliminar un archivo denominado something.txt2porque la extensión del nombre corto probablemente será .txt, y las máscaras de origen analizan tanto los nombres largos como los cortos. Vea la sección titulada"ERROR: Los nombres de archivo cortos 8.3 pueden alterar las opciones /D y /S "en¿Cuáles son las características y limitaciones no documentadas del comando FINDSTR de Windows?para ver un ejemplo de un error que surge de nombres cortos.

Los volúmenes NTFS pueden tener deshabilitados los nombres de archivos cortos (los nombres cortos que existían antes de deshabilitarlos permanecerán). Muchas personas (organizaciones) desactivan los nombres cortos en su sistema debido a los problemas que pueden causar.

Actualizar

Aquí hay un argumento definitivo de por qué es una pérdida de tiempo intentar establecer el algoritmo sobre cómo se generan los nombres de archivos cortos:FSUTIL le permite especificar cualquier nombre corto que desee para un archivo, siempre que no exista en esa carpeta.

Aquí está la documentación de ayuda relevante de 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

información relacionada