Come posso trovare il breve percorso di una directory / file di Windows?


74

Devo usare nomi di percorsi abbreviati per un'applicazione che sto usando. Ad esempio, ho bisogno C:\PROGRA~1\invece di C:\Program Files. Il programma non è in grado di gestire spazi e non accetta percorsi tra virgolette (ad es "C:\Program Files".).

Se aiuta, sto usando Windows 7. Posso accedere a qualsiasi versione da XP, se necessario.

Risposte:


77

Fare clic su Start e digitare cmdnella casella Esegui. Avvia cmd e usa cdper accedere alla cartella che ti interessa:

cd \

Poi

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

Quindi lo fai per ogni sottocartella nel percorso?
endolito

@endolith Il /spassaggio alla ricorsione della sottocartella
Paolo

1
Voglio dire come visualizzi l'intero percorso 8.3?
endolito il

4
@Paul Questo non sembra funzionare in Win10. Qualche idea?
AHungerArtist,

3
@AHungerArtist I nomi brevi dei file non esistono necessariamente; la loro creazione può essere disattivata.
Hipponax43,

38

Crea un file bat in una comoda directory quindi puoi copiare + incollare il percorso breve da quel percorso.

Potresti semplicemente eseguire command.come continuare a eseguire cdcomandi anche nella tua directory corrente.

Negli script batch di Windows, %~s1espande i parametri del percorso in nomi brevi . Crea questo file batch:

@ECHO OFF
echo %~s1

Ho chiamato il mio shortNamePath.cmde lo chiamo così:

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

Ecco una versione che utilizza la directory corrente se non è stato fornito alcun parametro:

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

Chiamato senza parametri:

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

Utilizzando SETe una variabile denominata

Il Prompt dei comandi di Windows ha alcune convenzioni per la gestione delle variabili con spazi nei loro valori che sono in qualche modo difficili da imparare e comprendere, specialmente se si ha un background Unix. Tu puoi fare

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

( senza virgolette ), oppure

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

(notare il posizionamento non intuitivo delle virgolette); poi

CALL :testargs "%TESTPATH%"
        ︙

:testargs
echo %~s1
goto :eof

6
Davvero utile, dovrebbe essere contrassegnato come risposta!
lucaferrario,

Grazie! È possibile utilizzare un comando SET? come SET AAA = C: \ programmi \
quant'altro

@ Li3ro Non sono riuscito a capire il modo di comando variabile SET ma mi sono avvicinato abbastanza, puoi vederlo in fondo alla risposta, ho solo bisogno di una piccola correzione. Non mi occupo della programmazione di script batch, quindi non so come.
SSpoke

Non è fattibile in questo modo. hai bisogno del ciclo for per questo
Li3ro,

Questo è più utile della risposta accettata
EvilTeach

9

Ecco una fodera :

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

Ripartizione :

  • cmd /c - Avvia una nuova istanza dell'interprete dei comandi di Windows, esegue il comando specificato da stringa e quindi termina
  • for %%parameter in (set) do comando - Esegue condizionalmente un comando più volte.
  • echo- Visualizza i messaggi sullo schermo. @il simbolo è uguale a quello ECHO OFFapplicato solo alla riga corrente.
  • %~s - Il percorso espanso contiene solo nomi brevi.

Fonti :


1
Bello!!! È possibile sostituire "C: \ Programmi" con. per ottenere il nome breve per la directory corrente
Andrew Steitz,

1
Quando / perché dovresti aver bisogno del cmd /c? Se ti trovi in ​​una finestra del prompt dei comandi, puoi semplicemente digitare il for %A in ("C:\Program Files") do @echo %~sAcomando e se lo digiti nella finestra di dialogo "Esegui", il risultato scompare prima di poterlo leggere.
Scott,

2
Ben fatto; come sottolinea @Scott, non è necessario cmd /cquando si esegue da cmd; ne hai bisogno da PowerShell , ma poi devi anche '...'chiudere i token dopo /c:cmd /c 'for %f in ("C:\Program Files") do @echo %~sf'
mklement0

8

Il "nome breve" è in realtà la vecchia convenzione di denominazione DOS 8.3, quindi tutte le directory saranno le prime 6 lettere seguite ~1assumendo che vi sia un solo nome corrispondente, ad esempio:

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

ecco l'unica eccezione

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\ABCDEF~2    - C:\ABCDEFGHI Directory as well

6
Non vero. A volte vengono utilizzati meno caratteri, in particolare se si utilizzano caratteri asiatici, come il coreano.
Arafangion,

1
Suppongo di scoprire quale sia quale nel caso "eccezionale" sia il punto della domanda - specialmente perché l '"eccezione" si verifica regolarmente in ogni installazione di Windows a 64 bit, dove potrebbe essere necessario sapere quale è fuori Program Filesed Program Files (x86)è PROGRA~1e quale uno è PROGRA~2. La risposta di Paul risolve questo problema.
OR Mapper

2
Ho così tanti file che iniziano con gli stessi caratteri che dopo quattro di essi ( ...~4) è iniziato con quello che sembra hashing, ad esempio ABxxxx~1dove x era esadecimale - che non è molto facile da leggere.
Sirap,

2
Stai suggerendo che l'utente può capire logicamente i nomi brevi guardando i nomi lunghi? Non è vero. Se creo ABCDEFGH-CAT, ottiene un nome breve ABCDEF~1. Se poi creo ABCDEFGH-DOG, ottiene un nome breve ABCDEF~2. Se poi elimino ABCDEFGH-CAT, ABCDEFGH-DOGha ancora un nome breve ABCDEF~2. Non c'è modo di dirlo solo guardando i nomi lunghi.
Scott,

come detto, il nome breve non deve essere le 6 prime lettere più ~1. Vedi la regola utilizzata da Windows per generare nomi brevi . E puoi anche impostare manualmente il nome breve con fsutil, quindi i due nomi potrebbero non avere alcuna relazione. Per non parlare dei collegamenti hard o soft
phuclv

4

Ho trovato un modo molto utile per risolvere il breve percorso della directory corrente (o qualsiasi altra cosa) se hai installato Powershell.

Apri PowerShell nella directory corrente

  • in cmd windows digitare powershell

  • se hai la cartella aperta in gui puoi digitare cmd.exe o powershell.exe direttamente nella barra degli indirizzi della cartella.

Quindi dare il comando

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

Origine delle informazioni: [ https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]


3

Simile alla risposta di Ivan Schwartz , è possibile sostituire "C: \ Programmi" con %cd%per ottenere la directory corrente:

cmd /c for %A in ("%cd%") do @echo %~sA  

0

In alternativa, puoi usare questo fantastico piccolo strumento chiamato PathCopyCopy

In pochi clic, puoi ottenere il percorso lungo e breve di qualsiasi cartella dal menu contestuale, ad esempio:

Fare clic con il tasto destro del mouse nella cartella di destinazione => Copia percorso => ​​Percorso breve.

Fatto. Verrà copiato negli appunti.

anteprima


0

Ho installato i moduli del nodo eseguendo npm installsu un boilerplate. Durante il tentativo di eliminare tali cartelle, Windows non ci consente di eliminarle poiché il percorso è troppo lungo per essere in grado di gestirle.

Dopo alcune ricerche poco profonde, ho pensato che sarebbe stato giusto il mio frammento di codice rinominare le cartelle da root a leaf in modo che avrebbe gettato qualsiasi eccezione di violazione anche per questo tentativo.

Per me funziona. Di seguito è riportato il codice per il progetto 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);
        }
    }

3
Si prega di leggere di nuovo attentamente la domanda. La tua risposta non risponde alla domanda originale.
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"

Questo è il modo più semplice che ho usato quando ho a che fare con file con spazi e questo è accessibile anche da Esplora file ha tutti gli stessi privilegi di accesso.


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

Salvalo come shortpath.bat, quindi trascina i file su di esso. Il suo risultato:

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

Chiamarlo con shortpath <file path>è anche OK.


-2

Sostituisci semplicemente gli spazi con

%20

È il modo in cui le cose vengono "tradotte" e gli spazi vanno in% 20.

Se hai davvero bisogno di molto, basta aprire il browser e digitare qualcosa di simile

test ";($#< and find the word test, and see that the space is %20 and so on...

Non penso che tu abbia ragione. Questo non produce un risultato positivo:if exist C:\Program%20Files\ (echo exists)
kayleeFrye_onDeck il

3
Stai parlando di qualcosa di completamente diverso. Il punto principale è che i nomi di directory e file sono troncati a 8 caratteri. Il browser non ha nulla a che fare con questo.
Dawid Ferenczy Rogožan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.