Bagaimana saya bisa menemukan jalur pendek dari direktori / file Windows?


73

Saya perlu menggunakan nama jalur yang diperpendek untuk aplikasi yang saya gunakan. Misalnya saya perlu C:\PROGRA~1\sebagai lawan C:\Program Files. Program tidak dapat menangani spasi dan tidak akan menerima jalur yang dikutip (misalnya "C:\Program Files").

Jika itu membantu, saya menggunakan Windows 7. Saya bisa mendapatkan akses ke versi apa pun sejak XP, jika perlu.

Jawaban:


77

Mulai, dan ketikkan cmdkotak run. Mulai cmd, dan gunakan cduntuk membuka folder yang Anda minati:

cd \

Kemudian

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

Jadi Anda melakukan ini untuk setiap subfolder di jalan?
endolith

@endolith /sSwitch ini melakukan rekursi subfolder
Paul

1
Maksud saya, bagaimana Anda menampilkan seluruh jalur 8.3?
Endolith

4
@ Paul Ini sepertinya tidak berfungsi di Win10. Ada ide?
AHungerArtist

3
@AHungerArtist Nama file pendek tidak selalu ada; ciptaan mereka dapat dimatikan.
Hipponax43

37

Buat file kelelawar di beberapa direktori yang nyaman maka Anda dapat menyalin + menempel jalur pendek dari jalur itu.

Anda bisa menjalankan command.comdan terus melakukan cdperintah ke direktori Anda saat ini juga.

Di skrip batch Windows, %~s1perluas parameter path ke nama pendek . Buat file batch ini:

@ECHO OFF
echo %~s1

Saya menelepon milik saya shortNamePath.cmddan menyebutnya seperti ini:

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

Berikut adalah versi yang menggunakan direktori saat ini jika tidak ada parameter yang diberikan:

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

Disebut tanpa parameter:

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

Menggunakan SETdan variabel bernama

Windows Command Prompt memiliki beberapa konvensi untuk menangani variabel dengan spasi dalam nilainya yang agak sulit dipelajari dan dipahami, terutama jika Anda memiliki latar belakang Unix. Anda dapat melakukan

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

( tanpa tanda kutip ), atau

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

(perhatikan penempatan kutipan yang tidak intuitif); kemudian

CALL :testargs "%TESTPATH%"

:testargs
echo %~s1
goto :eof

6
Sangat berguna, harus ditandai sebagai jawaban!
lucaferrario

Terima kasih! Apakah bisa dilakukan dengan menggunakan perintah SET? seperti SET AAA = C: \ program file \ apa pun \ ruang lain di tengah \ ke versi singkat
Li3ro

@ Li3ro Saya tidak dapat menemukan cara SET variabel perintah tetapi saya sudah cukup dekat, Anda dapat melihatnya di bagian bawah jawaban hanya perlu sedikit perbaikan. Saya tidak ke dalam pemrograman skrip batch jadi saya tidak tahu caranya.
SSpoke

Ini tidak bisa dilakukan dengan cara ini. Anda memerlukan for for loop untuk ini
Li3ro

Ini lebih berguna daripada jawaban yang diterima
EvilTeach

8

Ini satu liner :

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

Kerusakan :

  • cmd /c - Memulai instance baru dari interpreter perintah Windows, melakukan perintah yang ditentukan oleh string dan kemudian berakhir
  • for %%parameter in (set) do command - Menjalankan perintah beberapa kali secara kondisional.
  • echo- Menampilkan pesan di layar. @simbol sama dengan yang ECHO OFFditerapkan pada baris saat ini saja.
  • %~s - Jalur yang diperluas hanya berisi nama pendek.

Sumber :


1
Bagus!!! Anda dapat mengganti "C: \ Program Files" dengan. untuk mendapatkan nama pendek untuk direktori saat ini
Andrew Steitz

1
Kapan / mengapa Anda membutuhkannya cmd /c? Jika Anda berada di jendela Command Prompt, Anda bisa mengetikkan for %A in ("C:\Program Files") do @echo %~sAperintah, dan jika Anda mengetiknya di kotak dialog “Run”, hasilnya menghilang sebelum Anda bisa membacanya.
Scott

2
Dilakukan dengan baik; seperti yang ditunjukkan oleh @Scott, Anda tidak memerlukan cmd /cwaktu lari dari cmd; Anda memang membutuhkannya dari PowerShell , tetapi kemudian Anda juga perlu '...'-lose token setelah /c:cmd /c 'for %f in ("C:\Program Files") do @echo %~sf'
mklement0

8

"Nama pendek" sebenarnya adalah konvensi penamaan DOS 8.3 yang lama, jadi semua direktori akan menjadi 6 huruf pertama diikuti dengan ~1asumsi hanya ada satu nama yang cocok, misalnya:

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

di sini satu-satunya pengecualian

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

6
Tidak benar. Terkadang lebih sedikit karakter yang digunakan, terutama jika Anda menggunakan karakter asia, seperti Korea.
Arafangion

1
Saya kira mencari tahu mana yang mana dalam kasus "luar biasa" adalah titik dari pertanyaan - terutama karena "pengecualian" secara teratur terjadi di setiap instalasi Windows 64 bit, di mana Anda mungkin perlu tahu mana yang keluar Program Filesdan Program Files (x86)yang PROGRA~1dan yang mana satu PROGRA~2. Jawaban Paulus memecahkan masalah itu.
ATAU Mapper

2
Saya memiliki begitu banyak file yang dimulai dengan karakter yang sama sehingga setelah empat dari mereka ( ...~4) dimulai dengan apa yang tampak seperti hashing, misalnya di ABxxxx~1mana x adalah heksadesimal - yang tidak mudah dibaca.
Sirap

2
Apakah Anda menyarankan agar pengguna dapat mengetahui nama pendek secara logis dengan melihat nama panjang? Itu tidak benar. Jika saya membuat ABCDEFGH-CAT, itu akan mendapat nama pendek ABCDEF~1. Jika saya kemudian membuat ABCDEFGH-DOG, itu mendapat nama pendek ABCDEF~2. Jika saya kemudian hapus ABCDEFGH-CAT, ABCDEFGH-DOG, masih memiliki nama pendek ABCDEF~2. Tidak ada cara untuk mengetahui hanya dengan melihat nama-nama yang panjang.
Scott

seperti yang dikatakan, nama pendek tidak harus menjadi 6 huruf pertama plus ~1. Lihat aturan yang digunakan Windows untuk menghasilkan nama pendek . Dan Anda juga dapat mengatur nama pendek secara manual fsutil, sehingga kedua nama tersebut tidak memiliki hubungan apa pun. Jangankan tautan keras atau lunak
phuclv

4

Saya menemukan cara yang sangat berguna untuk memecahkan pathname singkat dari direktori saat ini (atau apa pun) jika Anda telah menginstal Powershell.

Cukup buka PowerShell di dir saat ini

  • di cmd windows ketik PowerShell

  • jika Anda memiliki folder terbuka di gui Anda dapat mengetikkan cmd.exe atau powershell.exe langsung di bilah alamat folder.

Kemudian berikan perintah

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

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


3

Mirip dengan jawaban Ivan Schwartz , Anda dapat mengganti "C: \ Program Files" dengan %cd%untuk mendapatkan dir saat ini:

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

0

Atau, Anda bisa menggunakan alat kecil yang luar biasa ini yang disebut PathCopyCopy

Dalam beberapa klik, Anda bisa mendapatkan jalur panjang dan pendek dari semua folder dari menu kontekstual, misalnya:

Klik kanan di folder tujuan => Jalur Salin => Jalur Pendek.

Selesai. Ini akan disalin ke clipboard Anda.

pratinjau


0

Saya telah menginstal modul simpul dengan menjalankan npm installpada boilerplate. Saat mencoba menghapus folder-folder itu, windows tidak memungkinkan kami untuk menghapusnya karena path terlalu panjang untuk dapat ditangani.

Setelah beberapa penelitian dangkal, saya pikir itu akan benar potongan kode saya sendiri untuk mengganti nama folder dari root ke daun sehingga akan membuang pengecualian pelanggaran untuk upaya ini juga.

Ini bekerja untuk saya. Berikut ini adalah kode untuk proyek 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
Silakan baca pertanyaan itu lagi dengan seksama. Jawaban Anda tidak menjawab pertanyaan awal.
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"

Ini adalah cara termudah yang saya gunakan ketika berurusan dengan file dengan spasi dan ini dapat diakses dari file explorer juga memiliki semua hak akses yang sama.


-2

Cukup ganti spasi dengan

%20

Begitulah cara "diterjemahkan", dan spasi masuk ke% 20.

Jika Anda benar-benar membutuhkan banyak, cukup buka browser Anda dan ketik sesuatu seperti

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

Saya pikir kamu tidak benar. Ini tidak menghasilkan hasil yang positif:if exist C:\Program%20Files\ (echo exists)
kayleeFrye_onDeck

3
Anda sedang berbicara tentang sesuatu yang sangat berbeda. Poin utamanya adalah direktori dan nama file terpotong hingga 8 karakter. Peramban tidak ada hubungannya dengan itu.
Dawid Ferenczy Rogožan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.