Por algún motivo que desconozco, en algunas instalaciones de Windows 10, el soporte de nombres de archivo corto o SFN (Short File Names), viene desactivado en algunos volúmenes.
Si la principal revolución de Windows NT 3.1 y Windows 95, fue el soporte de nombres de archivo largos o LFN (Long File Names), te preguntarás para que quiere uno seguir manejando los ficheros y directorios siguiendo la vieja convención de FAT tipo 8.3 (8dot3), o sea un nombre de ocho caracteres, y una extensión de tres.
En circunstancias normales, no necesitarías esta característica, en especial si usas una versión de 64 bits de Windows que ya no es compatible con DOS. Sin embargo, puede que llegues a necesitarlo, tal vez para borrar un archivo o directorio, y que el sistema se queja de que la ruta especificada es demasiado larga. En mi caso esa necesidad vino al querer instalar el entorno de desarrollo Lazarus, en mi carpeta habitual de «Archivos de programa». El instalador se quejaba de que la ruta no podía contener espacios, así que esencialmente sólo me dejaba instalarlo en C:\Lazarus.
Pues bien, el truco que seguí con mi antigua instalación de Lazarus 1.4, fue instalarlo en D:\ARCHIV~1\Lazarus, o sea el nombre corto equivalente a D:\Archivos de programa\Lazarus. En este caso no fue posible, puesto que en mi unidad D:, Windows no tenía habilitada la generación de nombres de archivo cortos. Esta característica, guarda una correspondencia entre nombres largos y cortos. Esto es, nos da un mayor grado de compatibilidad a cambio de un trabajo imperceptiblemente superior cada vez que se crea un archivo o directorio. De este modo puedes seguir trabajando y visualizando nombres largos, pero si quieres, además los cortos.
Si ejecutas un DIR /X, Windows te mostrará los nombres largos, y los cortos en el caso de que existan:
Puedes ver que «Archivos de programa» tiene asociado el de ARCHIV~1. FICHEROS no tiene asociado ningún nombre corto, puesto que ya es corto de por si (menos de 8 caracteres y sin espacios), mientras que PROYECTOS o _DOWNLOADS no lo tienen. Esto ya es un indicativo de la configuración de Short File Names.
Lo primero que necesitas saber es si ese volumen tiene activado la correspondencia de nombres cortos por defecto. Una vez activada, cada nuevo archivo generará su nombre corto. Si la desactivamos, esto dejará de ser así. En ambos casos los efectos no son retroactivos, así que si la activamos, los archivos que ya existieran no lo tendrán. Y si la desactivamos, no perderemos los nombres cortos de ficheros que ya existieran.
Desde una consola de comandos (CMD) con permisos de administración, ejecutamos lo siguiente:
fsutil 8dot3name query d:
Que generará una respuesta de este estilo:
El estado del volumen es: 0 (está habilitada la creación de nombres 8dot3).
El estado del Registro es: 2 (valor predeterminado: configuración por volumen).
De acuerdo con las dos opciones de configuración anteriores, la creación de nombres 8dot3 está habilitada en d:
La última línea es el quid de la cuestión. En este ejemplo, la generación de nombres cortos está activada en la unidad D:
Fsutil existe desde Windows 2000 Server, pero no se incorporaron a los sistemas operativos de escritorio hasta Windows 7.
Para activarlo, no tenemos más que ejecutar:
fsutil 8dot3name set d: 0
Sin embargo nos queda el problema de aquellos archivos y directorios que ya existieran, y que no tienen un nombre corto. Pues manualmente podemos generarle uno a nuestro gusto de esta manera:
fsutil file setshortname «D:\Archivos de programa» ARCHIV~1
Ten en cuenta que en esta situación, cuando usamos setshortname, se requiere un uso exclusivo a ese recurso, si alguna aplicación lo tiene abierto, fallará con un «Acceso denegado».
Finalmente si quisiéramos revertirlo, nada más sencillo que:
fsutil 8dot3name set d: 1
Si quieres más detalles, revisa referencia de Fsutil.
Espectacular post. Mis felicitaciones, Guti.
yo siempre intento acortar nombres, a la larga te evitas muchos problemas (por ejemplo, en manejo de archivos de rutas de acceso, cuando indexas varias carpetas a la vez), así que el que no tenga soporte para ello lo veo un contrasentido y una de esas tonterías más que están tan de moda en el mundo de la informática, pero que no tiene ni pies ni cabeza. Lo suyo sería que viniera activado por defecto, ¿no?
No se por qué, me da a mí que en Windows, iOS y demás, han empezado a trabajar los becarios e ingenieros veinteañeros, y los informáticos de verdad se han jubilado…
Yo seré muy maniático, o puede que sea que vengo de los tiempos de DOS, pero aún hoy sigo evitando nombres largos, espacios (los suelo reemplazar por guiones bajos) y caracteres extraños en los nombres de fichero y de directorio. Creo que es curarse en salud.
Muchas gracias elreymon. La verdad que es una tontería, pero que hasta que no das con ella te puede volver loco.
Cierto bianamaran, porque la ganancia de rendimiento que se obtiene quitando el soporte de nombres cortos debe ser marginal. Si tan modernos nos y quieren eliminarlos, que antes se aseguren que todos los programas son capaces de funcionar con nombres largos. Porque ya digo que Lazarus, por defecto no es capaz.
Yo también soy un maniático Ender_Wiggin y los evito. Al menos en cuanto a caracteres especiales y espacios. Si bien los nombres largos, reconozco que son cómodos, porque el 8.3 no era demasiado explícito. Pero hay una cosa que me da todavía más rabia, y es que un programa requiera ser instalado, y no puedas hacerlo sobre «Archivos de programa» como era el caso.
Gracias por el tipo, pero es bien conocido que microsoft implementa cambios sin pedir opiniones ni permisos, no me extrañaría que esa función desaparezca en el futuro así como así.
excelente solucion, muchas gracias
Gracias claudio.