Bir Windows dizini / dosyasının kısa yolunu nasıl bulabilirim?


73

Kullandığım bir uygulama için kısaltılmış yol adlarını kullanmam gerekiyor. Mesela ben C:\PROGRA~1\buna karşı ihtiyacım var C:\Program Files. Program boşlukları işleyemez ve alıntı yolları kabul etmez (örn. "C:\Program Files").

Yardımcı olursa, Windows 7 kullanıyorum. Gerekirse, XP'den beri herhangi bir sürüme erişebilirim.

Yanıtlar:


77

Başlat ve cmdçalıştır kutusuna yazın. Cmd'yi başlatın ve cdilgilendiğiniz klasöre ulaşmak için kullanın :

cd \

Sonra

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

Yani bunu yoldaki her alt klasör için mi yapıyorsun?
19'da

@endolith /sAnahtar alt klasör özyinelemesini yapıyor
Paul,

1
Yani tüm 8.3 yolu nasıl görüntülersin?
Endolit

4
@Paul Bu Win10'da çalışmıyor gibi görünüyor. Herhangi bir fikir?
AHungerArtist

3
@AHungerArtist Kısa dosya adları mutlaka bulunmaz; yarattıkları kapatılabilir.
Hipponax43

37

Uygun bir dizinde bir yarasa dosyası oluşturun, sonra kısa yoldan kopyalayıp yapıştırabilirsiniz.

Siz de sadece çalıştırabilir command.comve cdmevcut dizininize komutları vermeye devam edebilirsiniz.

Windows toplu iş komut dosyalarında, %~s1yol parametrelerini kısa adlara genişletir . Bu toplu iş dosyasını oluşturun:

@ECHO OFF
echo %~s1

Benimkini aradım shortNamePath.cmdve şöyle çağırdım :

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

Parametre verilmediyse, geçerli dizini kullanan bir sürüm:

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

Parametresiz çağrıldı:

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

SETVe adlandırılmış bir değişken kullanma

Windows Komut İsteminde, özellikle Unix arka planınız varsa, değerlerinde boşlukları olan değişkenlerin öğrenilmesi ve anlaşılması güç olan bazı kuralları vardır. Yapabilirsin

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

( tırnak işareti olmadan ) veya

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

(tekliflerin sezgisel olmayan yerleşimini not edin); sonra

CALL :testargs "%TESTPATH%"
        ︙

:testargs
echo %~s1
goto :eof

6
Gerçekten yararlı, cevap olarak işaretlenmeli!
lucaferrario

Teşekkürler! SET komutunu kullanarak yapabiliyor mu? SET AAA = C: \ program dosyaları \ ne \ \ ortada başka bir boşluk \ kısa versiyonuna gibi
Li3ro

@ Li3ro SET değişken komut yolunu bulamadım ama oldukça yaklaştım, cevabın en altında biraz düzeltme gerekiyor. Toplu komut dosyası programlamasına dahil değilim, bu yüzden nasıl yapacağımı bilmiyorum.
SSp 20

Bu şekilde mümkün değildir. bunun için for döngüsüne ihtiyacınız var
Li3ro

Bu kabul edilen cevaptan daha kullanışlıdır
EvilTeach 10:17

8

İşte bir astar :

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

Arıza :

  • cmd /c - Windows komut yorumlayıcısının yeni bir örneğini başlatır, dize tarafından belirtilen komutu yerine getirir ve sonra sona erer
  • for %%parameter in (set) do command - Koşullu olarak bir komutu birkaç kez gerçekleştirin.
  • echo- Ekrandaki mesajları görüntüler. @sembolü, ECHO OFFyalnızca geçerli satıra uygulananla aynıdır .
  • %~s - Genişletilmiş yol yalnızca kısa adlar içeriyor.

Kaynaklar :


1
Güzel!!! "C: \ Program Files" ile değiştirebilirsiniz. geçerli dizinin kısa adını almak için
Andrew Steitz

1
Ne zaman / neden ihtiyacınız olacak cmd /c? Bir Komut İstemi penceresindeyseniz, sadece for %A in ("C:\Program Files") do @echo %~sAkomutu yazabilirsiniz ve bunu “Çalıştır” iletişim kutusuna yazarsanız, sonuç okumak için sonuç kaybolur.
Scott,

2
Güzel yapılır; @Scott işaret ettiği gibi, sen gerekmez cmd /cgelen çalıştırırken cmd; PowerShell'den buna ihtiyacınız var , ancak daha sonra '...'belirteçleri sonra açmanız gerekir /c:cmd /c 'for %f in ("C:\Program Files") do @echo %~sf'
mklement0

8

"Kısa isim" gerçekten eski DOS 8.3 adlandırma kuralı, bu nedenle tüm dizinler ilk 6 harf olacak, ardından ~1eşleşen tek bir isim olduğunu varsayarak takip edecekler :

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

tek istisna burada

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

6
Doğru değil. Bazen, özellikle Korece gibi asyalı karakterler kullanıyorsanız, daha az sayıda karakter kullanılır.
Arafangion

1
Bir soru noktasıdır "istisnai" durumunda hangisinin hangisi bulmaya varsayalım - "istisna" düzenli her Windows 64 bit kurulumda meydana özellikle, bilmeniz gerekebilir nerede dışında hangisinin Program Filesve Program Files (x86)olduğu PROGRA~1ve hangi biri PROGRA~2. Paul 'un cevabı bu sorunu çözdü.
VEYA Haritacısı

2
Dörtten sonra ( ...~4) karma karakterlerle başlayan, örneğin ABxxxx~1x'in onaltılık olduğu - ki bu da okunması kolay olmayan aynı karakterlerle başlayan çok fazla dosyam var.
Sirap

2
Kullanıcının kısa isimleri mantıksal olarak uzun isimlere bakarak çözmesini mi öneriyorsunuz? Bu doğru değil. Eğer ABCDEFGH-CATyaratırsam kısa adı alır ABCDEF~1. O zaman ben yaratırsam ABCDEFGH-DOG, kısa bir isim olur ABCDEF~2. O zaman silersem ABCDEFGH-CAT, ABCDEFGH-DOGyine de kısa adı olur ABCDEF~2. Sadece uzun isimlere bakarak söylemenin yolu yok.
Scott,

Dediği gibi, kısa adı 6 ilk harf artı olmak zorunda değildir ~1. Windows'un kısa adlar oluşturmak için kullandığı kurala bakın . Ayrıca kısa adı manuel olarak da ayarlayabilirsiniz fsutil, böylece iki adın hiçbir ilişkisi olmayabilir. Sert veya yumuşak bağlantıları rahat bırak
phuclv

4

Powershell'i yüklediyseniz, geçerli dizinin kısa yolunu (veya başka bir şeyi) çözmek için çok kullanışlı bir yol buldum.

Sadece powershell'i geçerli dizinde aç

  • cmd pencerelerde powershell yazın

  • GUI'de açık bir klasör varsa, doğrudan klasörün adres çubuğuna cmd.exe veya powershell.exe yazabilirsiniz.

Öyleyse emir ver

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

Bilginin kaynağı: [ https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]


3

Ivan Schwartz'ın cevabına benzer şekilde , %cd%geçerli dizini almak için "C: \ Program Files" ile değiştirebilirsiniz:

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

0

Alternatif olarak, PathCopyCopy adlı bu harika küçük aracı kullanabilirsiniz

Birkaç tıklamayla, bağlamsal menüden kelimenin tam anlamıyla herhangi bir klasörün uzun ve kısa yolunu alabilirsiniz, örneğin:

Hedef klasöre sağ tıklayın => Yol Kopyala => Kısa Yol.

Bitti. Panoya kopyalanacaktır.

Ön izleme


0

npm installBir kazan üzerinde çalıştırarak düğüm modülleri kurdum . Bu klasörleri silmeye çalışırken, pencereler yolu silmemiz için çok uzun olduğundan silmemize izin vermiyor.

Bazı sığ araştırmalardan sonra, klasörleri kökten yaprağa yeniden adlandırmak için kendi kod parçacığımın doğru olacağını düşündüm, böylece bu girişim için herhangi bir ihlal istisnası atacaktı.

Benim için çalışıyor. C # projesinin kodu aşağıdadır.

    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
Lütfen soruyu tekrar dikkatlice okuyunuz. Yanıtınız yok değil orijinal soruya cevap.
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"

Bu, boşluk içeren dosyalarla çalışırken kullandığım en kolay yol ve bu da dosya gezgini ile erişilebiliyor ve aynı erişim ayrıcalıklarına sahip.


-2

Sadece boşlukları değiştir

%20

İşlerin "tercüme edilme şekli" ve boşluklar% 20'ye giriyor.

Gerçekten çok şeye ihtiyacınız varsa, tarayıcınızı açmanız ve benzeri bir şey yazmanız yeterlidir.

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

Haklı olduğunu sanmıyorum. Bu olumlu bir sonuç vermez:if exist C:\Program%20Files\ (echo exists)
kayleeFrye_onDeck

3
Tamamen farklı bir şeyden bahsediyorsun. Ana nokta, dizin ve dosya adlarının 8 karaktere kesilmesidir. Tarayıcının bununla hiçbir ilgisi yok.
Dawid Ferenczy Rogožan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.