Jak znaleźć krótką ścieżkę do katalogu / pliku Windows?


73

Muszę użyć skróconych nazw ścieżek dla aplikacji, której używam. Na przykład potrzebuję C:\PROGRA~1\w przeciwieństwie do C:\Program Files. Program nie obsługuje spacji i nie akceptuje ścieżek cytowanych (np "C:\Program Files".).

Jeśli to pomoże, korzystam z systemu Windows 7. W razie potrzeby mogę uzyskać dostęp do dowolnej wersji od XP.

Odpowiedzi:


77

Rozpocznij i wpisz cmdw polu Uruchom . Uruchom cmd i użyj, cdaby przejść do interesującego Cię folderu:

cd \

Następnie

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

Robisz to dla każdego podfolderu na ścieżce?
endolith

@endolith /sPrzełącznik dokonuje rekursji podfolderów
Paul

1
Mam na myśli, jak wyświetlić całą ścieżkę 8.3?
endolith

4
@Paul To nie działa w Win10. Jakieś pomysły?
AHungerArtist

3
@AHungerArtist Krótkie nazwy plików niekoniecznie istnieją; ich tworzenie można wyłączyć.
Hipponax43

37

Utwórz plik nietoperza w wygodnym katalogu, a następnie możesz skopiować i wkleić krótką ścieżkę z tej ścieżki.

Możesz po prostu uruchomić command.comi wykonywać cdpolecenia również w bieżącym katalogu.

W skryptach wsadowych Windows %~s1rozszerza parametry ścieżki do krótkich nazw . Utwórz ten plik wsadowy:

@ECHO OFF
echo %~s1

Zadzwoniłem do mojego shortNamePath.cmdi nazwał to tak:

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

Oto wersja, która korzysta z bieżącego katalogu, jeśli nie podano parametru:

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

Wywoływany bez parametrów:

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

Używanie SETi nazwana zmienna

W wierszu polecenia systemu Windows istnieją pewne konwencje obsługi zmiennych ze spacjami w ich wartościach, które są nieco trudne do nauczenia się i zrozumienia, zwłaszcza jeśli masz uniksowe tło. Możesz to zrobić

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

( bez cudzysłowów ) lub

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

(zwróć uwagę na nieintuicyjne umieszczanie cytatów); następnie

CALL :testargs "%TESTPATH%"

:testargs
echo %~s1
goto :eof

6
Naprawdę przydatne, należy oznaczyć jako odpowiedź!
lucaferrario

Dzięki! Czy można to zrobić za pomocą polecenia SET? jak SET AAA = C: \ program files \ what ever \ inna spacja w środku \ do krótkiej wersji
Li3ro

@ Li3ro Nie mogłem rozgryźć komendy SET zmiennej, ale zbliżyłem się bardzo blisko, widać to na dole odpowiedzi, wystarczy trochę naprawić. Nie interesuję się programowaniem skryptów wsadowych, więc nie wiem jak.
SSpoke

Nie da się tego zrobić. potrzebujesz do tego pętli for
Li3ro

Jest to bardziej przydatne niż zaakceptowana odpowiedź
EvilTeach,

8

Oto jeden liniowiec :

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

Podział :

  • cmd /c - Uruchamia nową instancję interpretera poleceń systemu Windows, wykonuje polecenie określone przez ciąg znaków, a następnie kończy działanie
  • for %%parameter in (set) do polecenie - warunkowo wykonaj polecenie kilka razy.
  • echo- Wyświetlaj komunikaty na ekranie. @symbol jest taki sam, jak ECHO OFFzastosowany tylko do bieżącej linii.
  • %~s - Rozszerzona ścieżka zawiera tylko krótkie nazwy.

Źródła :


1
Miły!!! Możesz zamienić „C: \ Program Files” na. uzyskać krótką nazwę bieżącego katalogu
Andrew Steitz,

1
Kiedy / dlaczego miałbyś tego potrzebować cmd /c? Jeśli jesteś w oknie wiersza polecenia, możesz po prostu wpisać for %A in ("C:\Program Files") do @echo %~sApolecenie, a jeśli wpiszesz je w oknie dialogowym „Uruchom”, wynik zniknie, zanim będziesz mógł go przeczytać.
Scott

2
Ładnie wykonane; @Scott wskazuje, że nie potrzebujesz, cmd /ckiedy biegniesz z cmd; potrzebujesz go z programu PowerShell , ale musisz także '...'zamknąć tokeny po /c:cmd /c 'for %f in ("C:\Program Files") do @echo %~sf'
mklement0

8

„Skrócona nazwa” jest tak naprawdę starą konwencją nazewnictwa DOS 8.3, więc wszystkie katalogi będą pierwszymi 6 literami, po których ~1zakłada się, że istnieje tylko jedna nazwa pasująca, na przykład:

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

tutaj jest jedyny wyjątek

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

6
Nie prawda. Czasami używa się mniejszej liczby znaków, szczególnie jeśli używasz znaków azjatyckich, takich jak koreański.
Arafangion

1
Przypuszczam, dowiedzieć się, który z nich jest który w „wyjątkowy” przypadek jest sens pytania - zwłaszcza jako „wyjątek” regularnie pojawia się w każdej instalacji systemu Windows 64-bitowych, gdzie być może trzeba wiedzieć, które jeden z Program Filesa Program Files (x86)jest PROGRA~1i który jeden jest PROGRA~2. Odpowiedź Paula rozwiązuje ten problem.
LUB Mapper

2
Mam tak wiele plików, które zaczynają się od tych samych znaków, że po czterech z nich ( ...~4) zaczęło się od czegoś, co wygląda jak skrót, np. ABxxxx~1Gdzie x był szesnastkowy - co nie jest bardzo łatwe do odczytania.
Sirap

2
Czy sugerujesz, że użytkownik może logicznie zrozumieć krótkie nazwy, patrząc na długie nazwy? To nieprawda. Jeśli utworzę ABCDEFGH-CAT, otrzyma krótką nazwę ABCDEF~1. Jeśli następnie utworzę ABCDEFGH-DOG, otrzyma krótką nazwę ABCDEF~2. Gdybym wtedy usunąć ABCDEFGH-CAT, ABCDEFGH-DOGwciąż ma krótką nazwę ABCDEF~2. Nie da się tego powiedzieć po prostu patrząc na długie nazwiska.
Scott

jak już wspomniano, krótka nazwa nie musi składać się z 6 pierwszych liter plus ~1. Zobacz zasadę używaną przez system Windows do generowania krótkich nazw . Możesz także ustawić krótką nazwę ręcznie fsutil, aby te dwie nazwy nie miały żadnej relacji. Nie mówiąc już o twardych lub miękkich linkach
phuclv

4

Znalazłem bardzo przydatny sposób rozwiązania krótkiej ścieżki do bieżącego katalogu (lub czegokolwiek innego), jeśli masz zainstalowany PowerShell.

Wystarczy otworzyć PowerShell w aktualnym reż

  • w cmd windows typu powershell

  • jeśli masz folder otwarty w GUI, możesz wpisać cmd.exe lub powershell.exe bezpośrednio w pasku adresu folderu.

Następnie wydaj polecenie

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

Pochodzenie informacji: [ https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]


3

Podobny do Iwana Schwartza odpowiedź , można zastąpić „C: \ Program Files” z %cd%, aby uzyskać bieżącego katalogu:

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

0

Możesz też użyć tego niesamowitego narzędzia o nazwie PathCopyCopy

Za pomocą kilku kliknięć możesz uzyskać długą i krótką ścieżkę dosłownie dowolnego folderu z menu kontekstowego, np .:

Kliknij folder docelowy prawym przyciskiem myszy => Ścieżka Kopiuj => Krótka ścieżka.

Gotowy. Zostanie skopiowany do schowka.

zapowiedź


0

Zainstalowałem moduły węzłów, działając npm installna płycie kotła. Podczas próby usunięcia tych folderów system Windows nie pozwala nam ich usunąć, ponieważ ścieżka jest zbyt długa, aby można ją było obsłużyć.

Po kilku płytkich badaniach pomyślałem, że słusznie byłoby, gdyby mój własny fragment kodu zmienił nazwy folderów z katalogu głównego na liść, aby w ten sposób zgłosić wyjątek dotyczący naruszenia.

Mi to pasuje. Poniżej znajduje się kod projektu 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
Przeczytaj uważnie pytanie ponownie. Twoja odpowiedź nie odpowiada na pierwotne pytanie.
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"

Jest to najłatwiejszy sposób, jakiego użyłem, gdy mam do czynienia z plikami ze spacjami, i jest to również dostępne z Eksploratora plików, który ma te same uprawnienia dostępu.


-2

Po prostu zamień spacje na

%20

W ten sposób rzeczy są „tłumaczone”, a spacje przechodzą do% 20.

Jeśli naprawdę potrzebujesz, po prostu otwórz przeglądarkę i wpisz coś takiego

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

Nie sądzę, że masz rację. Nie daje to pozytywnego wyniku:if exist C:\Program%20Files\ (echo exists)
kayleeFrye_onDeck

3
Mówisz o czymś zupełnie innym. Głównym punktem jest to, że nazwy katalogów i plików są obcięte do 8 znaków. Przeglądarka nie ma z tym nic wspólnego.
Dawid Ferenczy Rogožan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.