¿Cómo forzar la generación de nombres cortos (8dot3)?

9

Tengo un problema con los nombres abreviados de Windows. A veces, los nombres cortos no parecen generarse para "Archivos de programa" y "Archivos de programa (x86)".

Verifiqué que la generación de nombres cortos está habilitada, lo fsutil behavior query disable8dot3 C:que me dice que la configuración de todo el sistema es 2(por volumen) y el valor local es 0(crear 8dot3 nombres).

Debería verse más o menos así (tenga en cuenta que es una copia alemana de 32 bits):

C:\>dir /a /x

 Verzeichnis von C:\

21.12.2011  00:17    <DIR>                       $Recycle.Bin
14.07.2009  05:53    <VERBINDUNG>   DOCUME~1     Documents and Settings [C:\Users]
09.01.2011  15:35    <VERBINDUNG>   DOKUME~1     Dokumente und Einstellungen [C:Users]
27.11.2013  15:11     2.147.016.704              pagefile.sys
14.07.2009  03:37    <DIR>                       PerfLogs
26.11.2013  17:31    <DIR>          PROGRA~1     Program Files
08.11.2013  21:58    <DIR>          PROGRA~2     ProgramData
09.01.2011  15:35    <VERBINDUNG>   PROGRA~3     Programme [C:\Program Files]
09.01.2011  15:35    <DIR>                       Recovery
26.11.2013  17:40    <DIR>          SYSTEM~1     System Volume Information
23.01.2011  15:00    <DIR>                       Temp
11.01.2011  20:56    <DIR>                       Users
08.11.2013  14:53    <DIR>                       Windows

Sin embargo, en otra máquina (copia de 64 bits), esto se parece a C:> dir / a / x

 Verzeichnis von C:\

21.12.2011  00:17    <DIR>                       $Recycle.Bin
14.07.2009  05:53    <VERBINDUNG>   DOCUME~1     Documents and Settings [C:\Users]
09.01.2011  15:35    <VERBINDUNG>   DOKUME~1     Dokumente und Einstellungen [C:Users]
27.11.2013  15:11     2.147.016.704              pagefile.sys
14.07.2009  03:37    <DIR>                       PerfLogs
26.11.2013  17:31    <DIR>                       Program Files
26.11.2013  17:31    <DIR>                       Program Files (x86)
08.11.2013  21:58    <DIR>                       ProgramData
09.01.2011  15:35    <DIR>                       Recovery
26.11.2013  17:40    <DIR>          SYSTEM~1     System Volume Information
23.01.2011  15:00    <DIR>                       Temp
11.01.2011  20:56    <DIR>                       Users
08.11.2013  14:53    <DIR>                       Windows

Como habrás notado, faltan los nombres cortos para las carpetas del programa.

La pregunta ahora es cómo generarlos, porque necesito esos nombres cortos para algunos scripts más antiguos. Lo intenté con fsutil file setshortname "Program Files" "PROGRA~1", pero esto solo me da Access denied..

pgampe
fuente
La única forma en que sé cómo Windows va a volver a generar el nombre corto es copiar el directorio y eliminar el original. Por supuesto, eso no va a funcionar para el Program Files. ¿No es posible ajustar los scripts? Además, espero que el script no piense que el Program Filesdirectorio siempre es PROGRA~1porque si ese es el caso, su script se ejecutará en algún problema serio eventualmente porque los nombres cortos no siempre son los mismos. También puede pedir ayuda para actualizar los scripts al nombre largo (en lugar del nombre corto) findfirst, etc. (si es posible).
Rik
Soy consciente de los problemas con los nombres cortos y nunca escribiría esos guiones yo mismo. Siempre usaría los env vars para esto ( %programfiles%). Renombrar de hecho no funciona. ¿Tal vez puedo hacer esto sin conexión? Podría ser una solución alternativa.
pgampe
¿Intentaste ejecutar el comando como administrador? Crear un nombre 8.3 para un directorio existente
phuclv
Por supuesto. No funcionó.
pgampe

Respuestas:

5

Como dije en mi comentario ... La única forma en que sé cómo Windows va a volver a generar el nombre corto es copiar el directorio y eliminar el original. (no es factible para el directorio "Archivos de programa").

Sería mejor cambiar el script para usar nombres largos de archivos y carpetas. Si el script lo usa PROGRA~1, tendrá problemas con las instalaciones en las que la unidad se clonó de manera que los directorios se copiaron nuevamente. Por ejemplo, si ProgramDatase copia primero en el disco, se nombrará PROGRA~1y Program Filesse nombrará PROGRA~2.

Hay una opción para mantener los scripts funcionando por ahora :

Puede crear una unión de directorio de PROGRA~1a C:\Program Files. De esa manera, los scripts siguen funcionando y tienes tiempo para cambiarlos.

mklink /J "C:\PROGRA~1" "C:\Program Files"

Salida de mklink /?:

Creates a symbolic link.

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is a file
                symbolic link.
        /H      Creates a hard link instead of a symbolic link.
        /J      Creates a Directory Junction.
        Link    specifies the new symbolic link name.
        Target  specifies the path (relative or absolute) that the new link
                refers to.
Rik
fuente
Buena idea usar un salto de directorio :)
pgampe
¿Los cambios se realizan de forma mklinkpermanente o simplemente funcionan en un script por lotes que se está ejecutando? Lo siento, no tengo suficiente información sobre enlaces simbólicos y uniones.
Alireza Mohamadi
@AlirezaMohamadi Los cambios realizados con mklinkson permanentes. Al igual mkdir.
Rik
9

Para definir nombres cortos (8dot3) para archivos de programa, haga lo siguiente:

  1. Reiniciar computadora
  2. al iniciar, arranque en modo seguro con cmd prompt (F8 en mi computadora)
  3. Iniciar sesión
  4. desde el cmd, ingrese los siguientes cmds

    fsutil 8dot3name query
    fsutil behavior set disable8dot3 0
    fsutil file setshortname "Program Files" PROGRA~1
    dir /X
    

Ahora debería ver el nombre corto definido para los archivos de programa. Si lo desea, vuelva a establecer el comportamiento de 8dot3name en la configuración original que devolvió el cmd de consulta.

mono de coco
fuente
2
FWIW- No necesitaba reiniciar mi computadora para nada de esto. Además, puede activar / desactivar selectivamente 8.3 en diferentes unidades. La ubicación del registro para todas estas configuraciones es HKLM: \ System \ CurrentControlSet \ Control \ FileSystem \ Ntfs *. Consulte support.microsoft.com/en-us/kb/121007
Coruscate5
Sí, me quedé donde estaba e hice:
Mike Mounier