ฉันจะหาเส้นทางสั้น ๆ ของไดเรคทอรี / ไฟล์ Windows ได้อย่างไร


73

ฉันต้องใช้ชื่อพา ธ ที่สั้นลงสำหรับแอปพลิเคชันที่ฉันใช้ ตัวอย่างเช่นฉันต้องการเมื่อเทียบกับC:\PROGRA~1\ C:\Program Filesโปรแกรมไม่สามารถจัดการช่องว่างและจะไม่ยอมรับเส้นทางที่ยกมา (เช่น"C:\Program Files")

ถ้ามันช่วยได้ฉันใช้ Windows 7 ฉันสามารถเข้าใช้รุ่นใดก็ได้ตั้งแต่ XP ถ้าจำเป็น

คำตอบ:


77

คลิกเริ่มแล้วพิมพ์cmdในช่องเรียกใช้ เริ่ม cmd และใช้cdเพื่อไปยังโฟลเดอร์ที่คุณสนใจ:

cd \

แล้วก็

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

ดังนั้นคุณทำเช่นนี้สำหรับทุกโฟลเดอร์ย่อยในเส้นทางหรือไม่
endolith

@endolith /sสวิตช์เรียกคืนโฟลเดอร์ย่อย
Paul

1
ฉันหมายถึงคุณแสดงเส้นทางทั้งหมด 8.3 ได้อย่างไร
endolith

4
@Paul ดูเหมือนว่าจะไม่ทำงานใน Win10 ความคิดใด ๆ
AHungerArtist

3
@AHungerArtist ชื่อไฟล์แบบสั้นไม่จำเป็นต้องมีอยู่จริง การสร้างของพวกเขาสามารถปิดได้
Hipponax43

37

สร้างไฟล์ bat ในไดเรกทอรีที่สะดวกแล้วคุณสามารถคัดลอก + วางเส้นทางสั้น ๆ จากเส้นทางนั้น

คุณสามารถเรียกใช้command.comและทำcdคำสั่งไปยังไดเรกทอรีปัจจุบันของคุณได้เช่นกัน

ในสคริปต์ชุดของ Windows ขยายพารามิเตอร์เส้นทางไปยังชื่อที่สั้น%~s1 สร้างไฟล์ชุดนี้:

@ECHO OFF
echo %~s1

ฉันshortNamePath.cmdโทรหาฉันแล้วโทรมันอย่างนี้

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

นี่คือเวอร์ชันที่ใช้ไดเรกทอรีปัจจุบันหากไม่มีการระบุพารามิเตอร์:

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

เรียกว่าไม่มีพารามิเตอร์:

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

การใช้SETและตัวแปรที่ตั้งชื่อ

Windows Command Prompt มีข้อกำหนดบางประการสำหรับจัดการตัวแปรที่มีช่องว่างในค่าที่ค่อนข้างยากที่จะเรียนรู้และเข้าใจโดยเฉพาะถ้าคุณมีพื้นหลัง Unix คุณทำได้

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

( ไม่มีเครื่องหมายคำพูด ) หรือ

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

(จดบันทึกตำแหน่งคำพูดที่ไม่เข้าใจง่าย); แล้วก็

CALL :testargs "%TESTPATH%"
        ︙

:testargs
echo %~s1
goto :eof

6
มีประโยชน์จริง ๆ ควรทำเครื่องหมายเป็นคำตอบ!
lucaferrario

ขอบคุณ! มันสามารถใช้คำสั่ง SET ได้หรือไม่? เช่น SET AAA = C: \ program files \ อะไรที่เคยมีอีก \ พื้นที่ว่างตรงกลาง \ ถึงเวอร์ชั่นสั้น
Li3ro

@ Li3ro ฉันไม่สามารถหาคำสั่งตัวแปร SET ได้ แต่ฉันเข้าใกล้คุณสามารถดูได้ที่ด้านล่างของคำตอบเพียงแค่ต้องการแก้ไขเล็กน้อย ฉันไม่ได้เข้าสู่การเขียนโปรแกรมแบทช์สคริปต์ดังนั้นฉันจึงไม่รู้
SSpoke

ไม่สามารถทำได้ด้วยวิธีนี้ คุณต้องการการวนซ้ำสำหรับสิ่งนี้
Li3ro

นี่มีประโยชน์มากกว่าคำตอบที่ยอมรับ
EvilTeach

8

นี่คือหนึ่งซับ :

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

รายละเอียด :

  • cmd /c - เริ่มต้นอินสแตนซ์ใหม่ของตัวแปลคำสั่ง Windows ดำเนินการคำสั่งที่ระบุโดยสายอักขระแล้วจึงยกเลิก
  • for %%parameter in (set) do command - ดำเนินการตามคำสั่งแบบมีเงื่อนไขหลายครั้ง
  • echo- แสดงข้อความบนหน้าจอ @สัญลักษณ์จะเหมือนกับที่ECHO OFFใช้กับบรรทัดปัจจุบันเท่านั้น
  • %~s - เส้นทางที่ขยายประกอบด้วยชื่อสั้น ๆ เท่านั้น

แหล่งข้อมูล :


1
นีซ !!! คุณสามารถแทนที่ "C: \ Program Files" ด้วย เพื่อให้ได้ชื่อแบบย่อสำหรับไดเรกทอรีปัจจุบัน
Andrew Steitz

1
เมื่อ / เหตุผลที่คุณจะต้องcmd /c? หากคุณอยู่ในหน้าต่างพรอมต์คำสั่งคุณสามารถพิมพ์for %A in ("C:\Program Files") do @echo %~sAคำสั่งและหากคุณพิมพ์ลงในกล่องโต้ตอบ“ เรียกใช้” ผลลัพธ์จะหายไปก่อนที่คุณจะสามารถอ่านได้
สกอตต์

2
ทำได้ดีมาก @Scott ชี้ให้เห็นว่าคุณไม่จำเป็นต้องใช้cmd /cเมื่อทำงานจากcmd; คุณต้องการมันจากPowerShellแต่จากนั้นคุณต้อง - '...'ปิดโทเค็นหลัง/c:cmd /c 'for %f in ("C:\Program Files") do @echo %~sf'
mklement0

8

"ชื่อย่อ" เป็นรูปแบบการตั้งชื่อแบบเก่าของ DOS 8.3 ดังนั้นไดเรกทอรีทั้งหมดจะเป็นตัวอักษร 6 ตัวแรกตามด้วยการ~1สมมติว่ามีเพียงชื่อเดียวที่ตรงกับตัวอย่างเช่น:

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

นี่คือข้อยกเว้นเท่านั้น

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

6
ไม่จริง. บางครั้งมีการใช้อักขระน้อยลงโดยเฉพาะถ้าคุณใช้อักขระเอเชียเช่นเกาหลี
Arafangion

1
ฉันคิดว่าการหาออกเป็นที่หนึ่งซึ่งในกรณี "พิเศษ" เป็นจุดของคำถาม - โดยเฉพาะอย่างยิ่งเป็น "ข้อยกเว้น" เป็นประจำเกิดขึ้นในทุกการติดตั้ง Windows 64 บิตที่คุณอาจจะต้องรู้ว่าที่หนึ่งออกจากProgram FilesและProgram Files (x86)เป็นPROGRA~1และที่ PROGRA~2หนึ่งคือ คำตอบของพอลแก้ปัญหานี้ได้
หรือผู้ทำแผนที่

2
ฉันมีไฟล์มากมายที่เริ่มต้นด้วยตัวอักษรตัวเดียวกันหลังจากนั้นสี่ไฟล์ ( ...~4) มันเริ่มต้นด้วยสิ่งที่ดูเหมือน hashing เช่นABxxxx~1ตำแหน่งที่ x เป็นเลขฐานสิบหก - ซึ่งไม่ง่ายในการอ่าน
Sirap

2
คุณกำลังแนะนำว่าผู้ใช้สามารถหาชื่อย่ออย่างมีเหตุผลโดยดูที่ชื่อยาว ๆ ? ที่ไม่เป็นความจริง. ถ้าฉันสร้างมันได้รับชื่อสั้นABCDEFGH-CAT ABCDEF~1ถ้าฉันแล้วสร้างมันได้รับชื่อสั้นABCDEFGH-DOG ABCDEF~2ถ้าฉันแล้วลบABCDEFGH-CAT, ยังคงมีชื่อสั้นABCDEFGH-DOGABCDEF~2ไม่มีทางที่จะบอกได้โดยดูที่ชื่อยาว ๆ
สกอตต์

เป็นกล่าวชื่อสั้น ๆ ไม่จำเป็นต้องเป็น 6 ~1ตัวอักษรตัวแรกบวก ดูกฎที่ Windows ใช้สำหรับการสร้างชื่อที่สั้น และคุณยังสามารถตั้งชื่อสั้น ๆ ด้วยตนเองได้fsutilดังนั้นชื่อทั้งสองอาจไม่มีความสัมพันธ์ใด ๆ นับประสาลิงก์ที่แข็งหรืออ่อน
phuclv

4

ฉันพบวิธีที่สะดวกมากในการแก้ชื่อพา ธ สั้น ๆ ของไดเรกทอรีปัจจุบัน (หรืออย่างอื่น) ถ้าคุณติดตั้ง Powershell

เพียงแค่เปิด powershell ใน dir ปัจจุบัน

  • ใน cmd windows PowerShell พิมพ์

  • หากคุณมีโฟลเดอร์เปิดอยู่ใน gui คุณสามารถพิมพ์ cmd.exe หรือ powershell.exe โดยตรงในแถบที่อยู่ของโฟลเดอร์

จากนั้นให้คำสั่ง

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

ต้นกำเนิดของข้อมูล: [ https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]


3

เช่นเดียวกับคำตอบของ Ivan Schwartz คุณสามารถแทนที่ "C: \ Program Files" ด้วย%cd%เพื่อรับ dir ปัจจุบัน:

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

0

หรือคุณสามารถใช้เครื่องมือเล็ก ๆ ที่ยอดเยี่ยมนี้ชื่อPathCopyCopy

ในไม่กี่คลิกคุณจะได้เส้นทางที่ยาวและสั้นของโฟลเดอร์ใด ๆ จากเมนูตามบริบทเช่น:

คลิกขวาในโฟลเดอร์ปลายทาง => Path Copy => Short Path

เสร็จสิ้น มันจะถูกคัดลอกไปยังคลิปบอร์ดของคุณ

ภาพตัวอย่าง


0

ฉันได้ติดตั้งโมดูลโหนดโดยการเรียกใช้npm installบน boilerplate ในขณะที่พยายามลบโฟลเดอร์เหล่านั้น windows ไม่อนุญาตให้เราลบออกเนื่องจากเส้นทางยาวเกินกว่าที่จะจัดการได้

หลังจากการวิจัยตื้นบางอย่างฉันคิดว่ามันจะถูกชิ้นโค้ดของฉันเองที่จะเปลี่ยนชื่อโฟลเดอร์จากรากหนึ่งไปยังอีกอันหนึ่งเพื่อให้มันโยนข้อยกเว้นการละเมิดใด ๆ

มันใช้งานได้สำหรับฉัน ต่อไปนี้เป็นรหัสสำหรับโครงการ 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
โปรดอ่านคำถามอีกครั้งอย่างระมัดระวัง คำตอบของคุณไม่ตอบคำถามเดิม
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"

นี่เป็นวิธีที่ง่ายที่สุดที่ฉันเคยใช้เมื่อจัดการกับไฟล์ที่มีช่องว่างและสิ่งนี้สามารถเข้าถึงได้จาก File explorer ก็มีสิทธิ์การเข้าถึงเหมือนกันทั้งหมด


-2

เพียงแค่แทนที่ช่องว่างด้วย

%20

เป็นวิธีที่สิ่งต่าง ๆ "แปล" และช่องว่างเข้าสู่% 20

หากคุณต้องการมากจริงๆเพียงเปิดเบราว์เซอร์ของคุณและพิมพ์สิ่งที่ชอบ

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

ฉันไม่คิดว่าคุณพูดถูก สิ่งนี้ไม่ได้ให้ผลลัพธ์ที่เป็นบวก:if exist C:\Program%20Files\ (echo exists)
kayleeFrye_onDeck

3
คุณกำลังพูดถึงสิ่งที่แตกต่างอย่างสิ้นเชิง จุดหลักคือไดเรกทอรีและชื่อไฟล์จะถูกตัดเหลือ 8 ตัวอักษร เบราว์เซอร์ไม่เกี่ยวข้องกับสิ่งนั้น
Dawid Ferenczy Rogožan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.