Wie finde ich den Kurzpfad eines Windows-Verzeichnisses / einer Windows-Datei?

73

Ich muss verkürzte Pfadnamen für eine Anwendung verwenden, die ich verwende. Zum Beispiel brauche ich C:\PROGRA~1\im Gegensatz zu C:\Program Files. Das Programm kann keine Leerzeichen verarbeiten und akzeptiert keine in Anführungszeichen gesetzten Pfade (z "C:\Program Files". B. ).

Wenn es hilft, verwende ich Windows 7. Bei Bedarf kann ich auf jede Version seit XP zugreifen.

Irgendwas
quelle

Antworten:

77

Starten Sie und geben Sie cmddas Ausführungsfeld ein. Starten Sie cmd und rufen Sie den gewünschten cdOrdner auf:

cd \

Dann

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
Paul
quelle
Sie tun dies also für jeden Unterordner im Pfad?
Endolith
@endolith Der /sSchalter macht Unterordner Rekursion
Paul
1
Ich meine, wie zeigt man den gesamten 8.3-Pfad an?
Endolith
4
@Paul Dies scheint in Win10 nicht zu funktionieren. Irgendwelche Ideen?
AHungerArtist
3
@AHungerArtist Die kurzen Dateinamen müssen nicht unbedingt vorhanden sein. Ihre Erstellung kann deaktiviert werden.
Hipponax43
37

Erstellen Sie eine bat-Datei in einem geeigneten Verzeichnis, und kopieren Sie den Kurzpfad von diesem Pfad.

Sie könnten nur laufen command.comund halten dabei cdauch Befehle in Ihrem aktuellen Verzeichnis.

Erweitert in Windows-Stapelskripten die Pfadparameter %~s1zu Kurznamen . Erstellen Sie diese Batchdatei:

@ECHO OFF
echo %~s1

Ich habe meins angerufen shortNamePath.cmdund nenne es so:

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

Hier ist eine Version, die das aktuelle Verzeichnis verwendet, wenn kein Parameter angegeben wurde:

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

Aufruf ohne Parameter:

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

Using SETund eine benannte Variable

Die Windows-Eingabeaufforderung enthält einige Konventionen zum Behandeln von Variablen mit Leerzeichen in ihren Werten, die etwas schwer zu erlernen und zu verstehen sind, insbesondere wenn Sie einen Unix-Hintergrund haben. Du kannst tun

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

( ohne Anführungszeichen ) oder

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

(Beachten Sie die nicht intuitive Platzierung von Anführungszeichen); dann

CALL :testargs "%TESTPATH%"
        ︙

:testargs
echo %~s1
goto :eof
SSpoke
quelle
6
Wirklich nützlich, sollte als Antwort markiert werden!
Lucaferrario
Vielen Dank! Ist es möglich, einen SET-Befehl zu verwenden? wie SET AAA = C: \ Programme \ was auch immer \ ein anderer Raum in der Mitte \ zur Kurzversion
Li3ro
@ Li3ro Ich konnte die SET-Variablenbefehlsweise nicht herausfinden, aber ich bin ziemlich nah dran, man kann es am Ende der Antwort sehen, braucht nur eine kleine Korrektur. Ich bin nicht in Batch-Skript-Programmierung, also weiß ich nicht wie.
SSpoke
Das ist so nicht machbar. du brauchst die for-Schleife dafür
Li3ro
Dies ist nützlicher als die akzeptierte Antwort
EvilTeach
8

Hier ist ein Einzeiler :

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

Aufschlüsselung :

  • cmd /c - Startet eine neue Instanz des Windows-Befehlsinterpreters, führt den durch string angegebenen Befehl aus und bricht dann ab
  • for %%parameter in (set) do Befehl - Führen Sie einen Befehl mehrmals bedingt aus.
  • echo- Meldungen auf dem Bildschirm anzeigen. @Das Symbol entspricht ECHO OFFnur der aktuellen Zeile.
  • %~s - Der erweiterte Pfad enthält nur Kurznamen.

Quellen :

Ivan Schwarz
quelle
1
Nett!!! Sie können "C: \ Programme" durch ersetzen. um den Kurznamen für das aktuelle Verzeichnis zu erhalten
Andrew Steitz
1
Wann / warum brauchst du das cmd /c? Wenn Sie sich in einem Eingabeaufforderungsfenster befinden, können Sie den for %A in ("C:\Program Files") do @echo %~sABefehl einfach eingeben. Wenn Sie diesen Befehl in das Dialogfeld "Ausführen" eingeben, wird das Ergebnis ausgeblendet, bevor Sie es lesen können.
Scott
2
Schön gemacht; Wie @Scott hervorhebt, benötigen Sie das cmd /cbeim Ausführen von nicht cmd. Sie brauchen es von PowerShell , aber dann müssen Sie auch '...'die Token einschließen, nachdem /c:cmd /c 'for %f in ("C:\Program Files") do @echo %~sf'
mklement0
8

Der "Kurzname" ist in Wirklichkeit die alte DOS 8.3-Namenskonvention, sodass alle Verzeichnisse die ersten 6 Buchstaben sind, gefolgt von der ~1Annahme, dass nur ein Name übereinstimmt, zum Beispiel:

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

hier ist die einzige ausnahme

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\ABCDEF~2    - C:\ABCDEFGHI Directory as well
freedenizen
quelle
6
Nicht wahr. Manchmal werden weniger Zeichen verwendet, insbesondere wenn Sie asiatische Zeichen wie Koreanisch verwenden.
Arafangion
1
Ich nehme an, herauszufinden , welches die in dem „außergewöhnlichen“ Fall ist der Punkt , der Frage ist - zumal die „Ausnahme“ tritt regelmäßig in jeder Windows - 64 - Bit - Installation, wo Sie wissen müssen, können man aus der Program Filesund Program Files (x86)ist PROGRA~1und die einer ist PROGRA~2. Die Antwort von Paul löst dieses Problem.
ODER Mapper
2
Ich habe so viele Dateien, die mit den gleichen Zeichen beginnen, dass sie nach vier von ihnen ( ...~4) mit etwas begonnen haben, das wie Hashing aussieht, z. B. ABxxxx~1wo x hexadezimal war - was nicht sehr einfach zu lesen ist.
Sirap
2
Schlagen Sie vor, dass der Benutzer die Kurznamen logisch herausfinden kann, indem er sich die Langnamen ansieht? Das ist nicht wahr. Wenn ich es erstelle ABCDEFGH-CAT, erhält es einen Kurznamen ABCDEF~1. Wenn ich dann erstelle ABCDEFGH-DOG, bekommt es Kurznamen ABCDEF~2. Wenn ich dann lösche ABCDEFGH-CAT, ABCDEFGH-DOGhat das noch Kurznamen ABCDEF~2. Es gibt keine Möglichkeit, nur anhand der langen Namen zu erkennen.
Scott
Wie gesagt, der Kurzname muss nicht aus den 6 Anfangsbuchstaben plus bestehen ~1. Siehe die Regel, die Windows zum Generieren von Kurznamen verwendet . Und Sie können den Kurznamen auch manuell mit festlegen fsutil, sodass die beiden Namen möglicherweise überhaupt keine Beziehung haben.
Geschweige
4

Ich habe einen sehr praktischen Weg gefunden, um den kurzen Pfadnamen des aktuellen Verzeichnisses (oder etwas anderem) zu lösen, wenn Sie Powershell installiert haben.

Öffne einfach die PowerShell in der aktuellen Richtung

  • in cmd windows geben sie powershell ein

  • Wenn Sie einen Ordner in GUI geöffnet haben, können Sie cmd.exe oder powershell.exe direkt in die Adressleiste des Ordners eingeben.

Dann gib den Befehl

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

Herkunft der Informationen: [ https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]

Eino Mäkitalo
quelle
3

Ähnlich wie Ivan Schwartz Antwort mit: Sie können „\ Program Files C“ ersetzen %cd%bekommen aktuelles Verzeichnis:

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

Alternativ können Sie dieses tolle kleine Tool namens PathCopyCopy verwenden

Mit wenigen Klicks können Sie den langen und den kurzen Pfad von praktisch jedem Ordner aus dem Kontextmenü abrufen, z.

Klicken Sie mit der rechten Maustaste in den Zielordner => Pfad kopieren => Kurzer Pfad.

Getan. Es wird in Ihre Zwischenablage kopiert.

Vorschau

Asamoah
quelle
0

Ich habe Knotenmodule installiert, indem ich npm installauf einem Boilerplate lief. Beim Versuch, diese Ordner zu löschen, können wir sie in Windows nicht löschen, da der Pfad zu lang ist, um verarbeitet zu werden.

Nach einigen kurzen Recherchen dachte ich, es wäre mein eigenes Stück Code-Snippet, die Ordner von root in leaf umzubenennen, so dass es auch bei diesem Versuch zu einer Ausnahme von Verstößen kommt.

Für mich geht das. Es folgt der Code für das C # -Projekt.

    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
quelle
3
Bitte lesen Sie die Frage noch einmal sorgfältig durch. Ihre Antwort beantwortet nicht die ursprüngliche Frage.
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"

Dies ist der einfachste Weg, den ich beim Umgang mit Dateien mit Leerzeichen verwendet habe, und auf den auch über den Datei-Explorer zugegriffen werden kann, verfügt über dieselben Zugriffsrechte.

Santhosh Kumar
quelle
-2

Ersetzen Sie einfach die Leerzeichen durch

%20

So werden Dinge "übersetzt" und Leerzeichen in% 20 eingefügt.

Wenn Sie wirklich viel brauchen, öffnen Sie einfach Ihren Browser und geben Sie etwas wie ein

test ";($#< and find the word test, and see that the space is %20 and so on...
user556501
quelle
Ich glaube nicht, dass du recht hast. Dies führt nicht zu einem positiven Ergebnis:if exist C:\Program%20Files\ (echo exists)
kayleeFrye_onDeck
3
Sie sprechen von etwas völlig anderem. Der Hauptpunkt ist, dass Verzeichnis- und Dateinamen auf 8 Zeichen gekürzt werden. Der Browser hat damit nichts zu tun.
Dawid Ferenczy Rogožan