¿Cómo puedo encontrar la ruta corta de un directorio / archivo de Windows?

74

Necesito usar nombres de ruta abreviados para una aplicación que estoy usando. Por ejemplo, necesito C:\PROGRA~1\en lugar de C:\Program Files. El programa no puede manejar espacios y no aceptará rutas entre comillas (por ejemplo "C:\Program Files").

Si ayuda, estoy usando Windows 7. Puedo obtener acceso a cualquier versión desde XP, si es necesario.

algo
fuente

Respuestas:

77

Inicie y escriba cmden el cuadro de ejecución. Inicie cmd y utilícelo cdpara llegar a la carpeta que le interesa:

cd \

Entonces

dir /x

C:\>dir /x

13/10/2011  09:14 AM    <DIR>          DOCUME~1     Documents and Settings
13/10/2011  09:05 AM    <DIR>          PROGRA~1     Program Files
Pablo
fuente
¿Entonces haces esto para cada subcarpeta en el camino?
Endolito
@endolith El /scambio hace recursión de subcarpetas
Paul
1
Quiero decir, ¿cómo mostrar toda la ruta 8.3?
endolito el
44
@Paul Esto no parece funcionar en Win10. ¿Algunas ideas?
AHungerArtist
3
@AHungerArtist Los nombres cortos de archivo no necesariamente existen; su creación puede ser apagada.
Hipponax43
38

Cree un archivo bat en algún directorio conveniente, luego podría copiar + pegar la ruta corta desde esa ruta.

Podrías simplemente ejecutar command.comy seguir haciendo cdcomandos en tu directorio actual también.

En las secuencias de comandos por lotes de Windows, %~s1expande los parámetros de ruta a nombres cortos . Cree este archivo por lotes:

@ECHO OFF
echo %~s1

Llamé al mío shortNamePath.cmdy lo llamo así:

C:\> shortNamePath "c:\Program Files (x86)\Android\android-sdk"
c:\PROGRA~2\Android\ANDROI~1

Aquí hay una versión que usa el directorio actual si no se proporcionó ningún parámetro:

@ECHO OFF
if '%1'=='' (%0 .) else echo %~s1

Llamado sin parámetros:

C:\Program Files (x86)\Android\android-sdk> shortNamePath
C:\PROGRA~2\Android\ANDROI~1

Usando SETy una variable con nombre

El símbolo del sistema de Windows tiene algunas convenciones para manejar variables con espacios en sus valores que son algo difíciles de aprender y comprender, especialmente si tiene un fondo Unix. Tu puedes hacer

SET TESTPATH=c:\Program Files (x86)\Android\android-sdk

( sin comillas ), o

SET "TESTPATH=c:\Program Files (x86)\Android\android-sdk"

(tenga en cuenta la colocación no intuitiva de comillas); entonces

CALL :testargs "%TESTPATH%"

:testargs
echo %~s1
goto :eof
SSpoke
fuente
66
Realmente útil, debe ser marcado como respuesta!
lucaferrario
¡Gracias! ¿Es factible usar un comando SET? como SET AAA = C: \ archivos de programa \ lo que sea \ otro espacio en el medio \ a la versión corta
Li3ro
@ Li3ro No pude entender la forma de comando de la variable SET, pero me acerqué bastante, se puede ver en la parte inferior de la respuesta solo necesita una pequeña reparación. No estoy en la programación de secuencias de comandos por lotes, así que no sé cómo.
SSpoke
No es factible de esta manera. necesitas el bucle for para esto
Li3ro
Esto es más útil que la respuesta aceptada
EvilTeach
9

Aquí hay un trazador de líneas :

cmd /c for %A in ("C:\Program Files") do @echo %~sA

Desglose :

  • cmd /c - Inicia una nueva instancia del intérprete de comandos de Windows, ejecuta el comando especificado por cadena y luego termina
  • for %%parameter in (set) do comando - Condicionalmente ejecuta un comando varias veces.
  • echo- Mostrar mensajes en pantalla. @El símbolo es el mismo que se ECHO OFFaplica a la línea actual solamente.
  • %~s - La ruta expandida contiene solo nombres cortos.

Fuentes :

Ivan Schwarz
fuente
1
¡¡¡Agradable!!! Puede reemplazar "C: \ Archivos de programa" con. obtener el nombre corto para el directorio actual
Andrew Steitz
1
¿Cuándo / por qué necesitarías el cmd /c? Si está en una ventana del símbolo del sistema, puede simplemente escribir el for %A in ("C:\Program Files") do @echo %~sAcomando, y si escribe esto en el cuadro de diálogo "Ejecutar", el resultado desaparece antes de que pueda leerlo.
Scott,
2
Bien hecho; como señala @Scott, no necesita el cmd /ccuando se ejecuta desde cmd; lo necesita de PowerShell , pero luego también necesita '...'cerrar los tokens después de /c:cmd /c 'for %f in ("C:\Program Files") do @echo %~sf'
mklement0
8

El "nombre corto" es realmente la antigua convención de nomenclatura de DOS 8.3, por lo que todos los directorios serán las primeras 6 letras seguidas ~1asumiendo que solo hay un nombre que coincida, por ejemplo:

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\BCDEFG~1    - C:\BCDEFGHIJKL M Another Directory

aquí es la única excepción

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\ABCDEF~2    - C:\ABCDEFGHI Directory as well
Freedenizen
fuente
66
No es verdad. A veces se utilizan menos caracteres, especialmente si está utilizando caracteres asiáticos, como el coreano.
Arafangion
1
Supongo descubriendo cuál es el que en el caso "excepcional" es el punto de la pregunta - sobre todo porque la "excepción" se produce regularmente en todas las instalaciones de Windows de 64 bits, en donde es posible que necesite saber cuál de Program Filesy Program Files (x86)es PROGRA~1y qué uno es PROGRA~2. La respuesta de Paul resuelve ese problema.
O Mapper
2
Tengo tantos archivos que comienzan con los mismos caracteres que después de cuatro de ellos ( ...~4) comenzó con lo que parece un hash, por ejemplo, ABxxxx~1donde x era hexadecimal, lo que no es muy fácil de leer.
Sirap
2
¿Está sugiriendo que el usuario puede descifrar los nombres cortos lógicamente al mirar los nombres largos? Eso no es cierto. Si creo ABCDEFGH-CAT, recibe un nombre corto ABCDEF~1. Si luego creo ABCDEFGH-DOG, obtiene un nombre corto ABCDEF~2. Si a continuación, eliminar ABCDEFGH-CAT, ABCDEFGH-DOG, todavía tiene nombre corto ABCDEF~2. No hay forma de saberlo simplemente mirando los nombres largos.
Scott,
como se dijo, el nombre corto no tiene que ser las 6 primeras letras más ~1. Vea la regla que usa Windows para generar nombres cortos . Y también puede establecer el nombre corto manualmente fsutil, por lo que los dos nombres pueden no tener ninguna relación. Y mucho menos enlaces duros o blandos
phuclv
4

Encontré una forma muy útil de resolver el nombre corto de ruta del directorio actual (o cualquier otra cosa) si tiene instalado Powershell.

Simplemente abra PowerShell en el directorio actual

  • en cmd windows escriba powershell

  • si tiene una carpeta abierta en la interfaz gráfica de usuario, puede escribir cmd.exe o powershell.exe directamente en la barra de direcciones de la carpeta.

Entonces dar el comando

(New-Object -ComObject Scripting.FileSystemObject).GetFolder(".").ShortPath

Origen de la información: [ https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]

Eino Mäkitalo
fuente
3

Similar a la respuesta de Ivan Schwartz , puede reemplazar "C: \ Archivos de programa" con %cd%para obtener el directorio actual:

cmd /c for %A in ("%cd%") do @echo %~sA  
Eino Mäkitalo
fuente
0

Alternativamente, podría utilizar esta pequeña herramienta increíble llamada PathCopyCopy

En unos pocos clics, puede obtener la ruta larga y corta de literalmente cualquier carpeta desde el menú contextual, por ejemplo:

Haga clic derecho en la carpeta de destino => Ruta Copia => Ruta corta.

Hecho. Se copiará a su portapapeles.

avance

Asamoah
fuente
0

He instalado módulos de nodo ejecutándome npm installen un repetitivo. Al intentar eliminar esas carpetas, Windows no nos permite eliminarlas ya que la ruta es demasiado larga para poder manejarla.

Después de un poco de investigación superficial, pensé que sería correcto que mi propio fragmento de código cambie el nombre de las carpetas de raíz a hoja para que arroje cualquier excepción de violación para este intento también.

Esto funciona para mi. El siguiente es el código para el proyecto C #.

    public static int directoryCounterIndex = 0;
    public static void Main(string[] args)
    {
        string dirPath = @"D:\Studies\MeanStack\a\nodem";
        RenameDirectories(dirPath);
    }

    private static void RenameDirectories(string dirPath)
    {
        directoryCounterIndex += 1;
        var newPath = Path.GetDirectoryName(dirPath) + Path.DirectorySeparatorChar + directoryCounterIndex.ToString();
        Directory.Move(dirPath, newPath);
        var subDirectories = Directory.GetDirectories(newPath);
        foreach (var subDirectory in subDirectories)
        {
            RenameDirectories(subDirectory);
        }
    }
Ashok
fuente
3
Por favor lea la pregunta otra vez cuidadosamente. Su respuesta no responde a la pregunta original.
DavidPostill
0
C:\Users\abcd>subst z: "c:\Program Files (x86)\Microsoft Office365 Tools\Microsoft Visual Studio 14.0"

C:\Users\abcd>subst
Z:\: => C:\Program Files (x86)\Microsoft Office365 Tools\Microsoft Visual Studio 14.0"

Esta es la forma más fácil que he utilizado al tratar con archivos con espacios y también es accesible desde el explorador de archivos, tiene los mismos privilegios de acceso.

Santhosh Kumar
fuente
0
@echo off
for %%i in (%*) do echo %%~si
pause

Guárdelo como shortpath.bat y luego arrastre archivos sobre él. Su resultado:

C:\PROGRA~1
C:\PROGRA~2
C:\PROGRA~3
C:\Python27
C:\Users
C:\Windows
Press any key to continue . . .

Llamarlo también shortpath <file path>está bien.

NeoBlackXT
fuente
-2

Simplemente reemplace los espacios con

%20

Es la forma en que las cosas se "traducen" y los espacios entran en% 20.

Si realmente necesita mucho, simplemente abra su navegador y escriba algo como

test ";($#< and find the word test, and see that the space is %20 and so on...
usuario556501
fuente
No creo que tengas razón. Esto no produce un resultado positivo:if exist C:\Program%20Files\ (echo exists)
kayleeFrye_onDeck
3
Estás hablando de algo completamente diferente. El punto principal es que los nombres de directorio y archivo se truncan a 8 caracteres. El navegador no tiene nada que ver con eso.
Dawid Ferenczy Rogožan