Windows todavía lo utiliza ~
para acortar archivos y directorios con nombres largos. Puede ver el nombre "corto" escribiendo dir /X
en 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 /X
y veo que el nombre corto de fileB esREALLY~1.TXT
Creo un segundo archivo de texto:C:\reallylongfilenameA.txt
Luego corro dir /X
y veo que el nombre corto del archivo A esREALLY~2.TXT
Luego atraso el reloj un día, lo elimino C:\reallylongfilenameA.txt
y luego lo vuelvo a crear, esencialmente haciendo que la fecha de creación sea C:\reallylongfilenameA.txt
1 día antes C:\reallylongfilenameB.txt
.
Corro dir /X
y C:\reallylongfilenameA.txt
el nombre corto sigue siendo REALLY~2.TXT
.
Dado este ejemplo, ¿hay alguna forma de hacer que el nombre corto C:\reallylongfilenameA.txt
sea 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.
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 *.txt
la posibilidad de eliminar un archivo denominado something.txt2
porque 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