Làm cách nào để tìm đường dẫn ngắn của thư mục / tệp Windows?


73

Tôi cần sử dụng tên đường dẫn rút gọn cho một ứng dụng mà tôi đang sử dụng. Ví dụ tôi cần C:\PROGRA~1\trái ngược với C:\Program Files. Chương trình không thể xử lý các khoảng trắng và sẽ không chấp nhận các đường dẫn được trích dẫn (ví dụ "C:\Program Files").

Nếu nó giúp, tôi đang sử dụng Windows 7. Tôi có thể truy cập vào bất kỳ phiên bản nào kể từ XP, nếu cần.

Câu trả lời:


77

Bắt đầu và gõ cmdvào hộp chạy. Bắt đầu cmd và sử dụng cdđể đến thư mục bạn quan tâm:

cd \

Sau đó

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

Vì vậy, bạn làm điều này cho mỗi thư mục con trong đường dẫn?
endolith

@endolith Công /stắc thực hiện đệ quy thư mục con
Paul

1
Ý tôi là làm thế nào để bạn hiển thị toàn bộ đường dẫn 8.3?
endolith

4
@Paul Điều này dường như không hoạt động trong Win10. Có ý kiến ​​gì không?
AHungerArtist

3
@AHungerArtist Tên tệp ngắn không nhất thiết phải tồn tại; sáng tạo của họ có thể được tắt.
Hipponax43

37

Tạo một tập tin bat trong một thư mục thuận tiện sau đó bạn có thể sao chép + dán đường dẫn ngắn từ đường dẫn đó.

Bạn chỉ có thể chạy command.comvà tiếp tục thực hiện cdcác lệnh đến thư mục hiện tại của bạn.

Trong các tập lệnh bó của Windows, %~s1mở rộng các tham số đường dẫn thành các tên ngắn . Tạo tập tin bó này:

@ECHO OFF
echo %~s1

Tôi gọi cho tôi shortNamePath.cmdvà gọi nó như thế này:

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

Đây là phiên bản sử dụng thư mục hiện tại nếu không có tham số nào được cung cấp:

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

Được gọi không có tham số:

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

Sử dụng SETvà một biến được đặt tên

Windows Command Prompt có một số quy ước để xử lý các biến có khoảng trắng trong các giá trị của chúng hơi khó học và hiểu, đặc biệt nếu bạn có nền tảng Unix. Bạn có thể làm

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

( không có dấu ngoặc kép ), hoặc

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

(lưu ý vị trí trích dẫn không trực quan); sau đó

CALL :testargs "%TESTPATH%"
        ︙

:testargs
echo %~s1
goto :eof

6
Thực sự hữu ích, nên được đánh dấu là câu trả lời!
lucaferrario

Cảm ơn! Có phải nó có thể sử dụng lệnh SET không? như SET AAA = C: \ chương trình tập tin \ what ever \ một khoảng trống khác ở giữa \ đến phiên bản ngắn
Li3ro

@ Li3ro Tôi không thể tìm ra cách biến lệnh SET nhưng tôi đã khá gần, bạn có thể thấy nó ở cuối câu trả lời chỉ cần sửa chữa một chút. Tôi không tham gia lập trình tập lệnh hàng loạt nên tôi không biết làm thế nào.
SSpoke

Nó không thể làm theo cách này. bạn cần vòng lặp for cho điều này
Li3ro

Điều này hữu ích hơn câu trả lời được chấp nhận
EvilTeach

8

Đây là một lót :

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

Breakdown :

  • cmd /c - Bắt đầu một phiên bản mới của trình thông dịch lệnh Windows, thực hiện lệnh được chỉ định bởi chuỗi và sau đó chấm dứt
  • for %%parameter in (set) do lệnh - Có điều kiện thực hiện một lệnh nhiều lần.
  • echo- Hiển thị tin nhắn trên màn hình. @biểu tượng giống như chỉ ECHO OFFáp dụng cho dòng hiện tại.
  • %~s - Đường dẫn mở rộng chỉ chứa tên ngắn.

Nguồn :


1
Đẹp!!! Bạn có thể thay thế "C: \ Chương trình tập tin" bằng. để có được tên viết tắt của thư mục hiện tại
Andrew Steitz

1
Khi nào / tại sao bạn cần cmd /c? Nếu bạn đang ở trong cửa sổ Dấu nhắc Lệnh, bạn có thể chỉ cần nhập for %A in ("C:\Program Files") do @echo %~sAlệnh và nếu bạn nhập lệnh này vào hộp thoại của Run Run, kết quả sẽ biến mất trước khi bạn có thể đọc nó.
Scott

2
Hoàn thành tốt; như @Scott chỉ ra, bạn không cần cmd /ckhi chạy từ đó cmd; bạn cần nó từ PowerShell , nhưng sau đó bạn cũng cần phải '...'đóng lại các mã thông báo sau /c:cmd /c 'for %f in ("C:\Program Files") do @echo %~sf'
mkuity0

8

"Tên viết tắt" thực sự là quy ước đặt tên DOS 8.3 cũ, vì vậy tất cả các thư mục sẽ là 6 chữ cái đầu tiên theo sau bằng cách ~1giả sử chỉ có một tên trùng khớp, ví dụ:

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

đây là ngoại lệ duy nhất

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

6
Không đúng. Đôi khi ít ký tự được sử dụng, đặc biệt nếu bạn đang sử dụng các ký tự châu Á, chẳng hạn như tiếng Hàn.
Arafangion

1
Tôi cho rằng tìm ra cái nào là mà trong trường hợp "đặc biệt" là điểm của câu hỏi - đặc biệt là "ngoại lệ" thường xuyên xảy ra ở tất cả các cài đặt Windows 64 bit, nơi bạn có thể cần phải biết cái nào ra khỏi Program FilesProgram Files (x86)PROGRA~1và đó một là PROGRA~2. Câu trả lời của Paul giải quyết vấn đề đó.
HOẶC Mapper

2
Tôi có rất nhiều tệp bắt đầu bằng cùng một ký tự mà sau bốn trong số chúng ( ...~4) nó bắt đầu bằng cách băm, ví dụ như ABxxxx~1x là thập lục phân - không dễ đọc.
Sirap

2
Bạn có gợi ý rằng người dùng có thể tìm ra các tên ngắn một cách logic bằng cách nhìn vào các tên dài? Đo không phải sự thật. Nếu tôi tạo ABCDEFGH-CAT, nó được tên ngắn ABCDEF~1. Nếu tôi sau đó tạo ra ABCDEFGH-DOG, nó được đặt tên ngắn ABCDEF~2. Nếu tôi sau đó xóa ABCDEFGH-CAT, ABCDEFGH-DOGvẫn có tên viết tắt ABCDEF~2. Không có cách nào để nói chỉ bằng cách nhìn vào những cái tên dài.
Scott

như đã nói, tên viết tắt không phải là 6 chữ cái đầu tiên cộng ~1. Xem quy tắc mà Windows sử dụng để tạo tên ngắn . Và bạn cũng có thể đặt tên ngắn theo cách thủ công fsutil, vì vậy hai tên có thể không có mối quan hệ nào. Hãy để một mình các liên kết cứng hoặc mềm
phuclv

4

Tôi tìm thấy cách rất thuận tiện để giải quyết tên đường dẫn ngắn của thư mục hiện tại (hoặc bất cứ thứ gì khác) nếu bạn đã cài đặt Powershell.

Chỉ cần mở powershell trong thư mục hiện tại

  • trong cửa sổ cmd loại powershell

  • nếu bạn có thư mục mở trong gui, bạn có thể nhập cmd.exe hoặc powershell.exe trực tiếp vào thanh địa chỉ của thư mục.

Sau đó ra lệnh

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

Nguồn gốc của thông tin: [ https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]


3

Tương tự như câu trả lời của Ivan Schwartz , bạn có thể thay thế "C: \ Program Files" bằng %cd%cách lấy thư mục hiện tại:

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

0

Ngoài ra, bạn có thể sử dụng công cụ nhỏ tuyệt vời này có tên PathCopyCopy

Trong một vài cú nhấp chuột, bạn có thể nhận được đường dẫn dài và ngắn của bất kỳ thư mục nào theo nghĩa đen từ menu ngữ cảnh, ví dụ:

Nhấp chuột phải vào thư mục đích => Sao chép đường dẫn => Đường dẫn ngắn.

Làm xong. Nó sẽ được sao chép vào clipboard của bạn.

xem trước


0

Tôi đã cài đặt các mô-đun nút bằng cách chạy npm installtrên một cái nồi. Trong khi cố gắng xóa các thư mục đó, các cửa sổ không cho phép chúng tôi xóa chúng vì đường dẫn quá dài để có thể xử lý.

Sau một số nghiên cứu nông cạn, tôi nghĩ rằng đó sẽ là đoạn mã riêng của mình để đổi tên các thư mục từ gốc sang lá để nó cũng sẽ ném bất kỳ ngoại lệ vi phạm nào cho nỗ lực này.

Nó làm việc cho tôi. Sau đây là mã cho dự án 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
Xin vui lòng đọc lại câu hỏi một cách cẩn thận. Câu trả lời của bạn không trả lời câu hỏi ban đầu.
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"

Đây là cách dễ nhất mà tôi đã sử dụng khi xử lý các tệp có khoảng trắng và có thể truy cập được từ trình duyệt tệp này cũng có tất cả các đặc quyền truy cập giống nhau.


-2

Chỉ cần thay thế không gian bằng

%20

Đó là cách mọi thứ được "dịch" và không gian đi vào% 20.

Nếu bạn thực sự cần rất nhiều, chỉ cần bật mở trình duyệt của bạn và nhập một cái gì đó như

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

Tôi không nghĩ bạn đúng. Điều này không tạo ra kết quả tích cực:if exist C:\Program%20Files\ (echo exists)
kayleeFrye_onDeck

3
Bạn đang nói về một cái gì đó hoàn toàn khác nhau. Điểm chính là tên thư mục và tệp được cắt ngắn thành 8 ký tự. Trình duyệt không có gì để làm với điều đó.
Dawid Ferenczy Rogožan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.