เพิ่มไดเรกทอรีและไดเรกทอรีย่อยทั้งหมดไปยังตัวแปร PATH ด้วยรายการเดียว


19

ฉันมีไดเรกทอรีในโฟลเดอร์บ้านของฉันซึ่งฉันวางซอฟต์แวร์บรรทัดคำสั่ง (CMD_Software) ฉันใส่ซอฟต์แวร์แต่ละชิ้นในไดเรกทอรีของตัวเองภายใน CMD_Software เพื่อหลีกเลี่ยงความยุ่งเหยิง

ฉันต้องการสร้างรายการเดียวในตัวแปร PATH ของฉันที่จะอนุญาตให้เข้าถึง CMD_Software และไดเรกทอรีทั้งหมดที่มีจากบรรทัดคำสั่ง

ฉันพยายามC:\Users\myuser\CMD_Software\*แต่ก็ไม่ทำอะไรเลย นั่นคือจุดที่ฉันหมดความคิด

โปรดทราบว่าฉันไม่ได้พยายามกำหนดเส้นทางใหม่ในขณะที่เทอร์มินัลฉันกำลังพยายามกำหนดเส้นทางใหม่ใน "ตัวแปรสภาพแวดล้อม" ที่มีอยู่ในแท็บ "ขั้นสูง" ของคุณสมบัติของระบบ


คุณลองทำอะไรเช่น `C: \ Users \ myuser \ CMD_Software * 'หรือไม่
terdon

4
ฉันไม่คิดว่ามันเป็นไปได้
แฮร์รี่จอห์นสตัน

คำตอบ:


16

ตัวแปร PATH ไม่รองรับไวด์การ์ดหรือการเรียกซ้ำ นี่คือโดยการออกแบบ

มีวิธีแก้ไขสองวิธีที่เป็นไปได้ที่ฉันเคยใช้ในบางโอกาส:

  • สร้างไดเรกทอรีด้วยแบตช์ไฟล์อย่างง่ายและเพิ่มไดเรกทอรีนั้นลงใน PATH แต่ละไฟล์แบตช์สามารถเรียกใช้โปรแกรมที่คุณต้องการตัวอย่างเช่น

    :: CMD_Software.bat: start CMD_Software
    @C:\Users\myuser\CMD_Software\CMD_Software.exe %*
    

    บรรทัดแรกคือความคิดเห็นบรรทัดที่สองเริ่มต้น@เพื่อหลีกเลี่ยงการแสดงคำสั่งที่กำลังรันและ%*ใช้เพื่อส่งอาร์กิวเมนต์บรรทัดคำสั่งใด ๆ ไปยัง EXE

  • เพิ่มชื่อแทนไปยัง CMD.EXE:

    DOSKEY CMD_Software="C:\Users\myuser\CMD_Software\CMD_Software.exe" $*
    

    สิ่งนี้จะแปลCMD_Softwareในพร้อมท์คำสั่งเป็นทุกอย่างหลังจากเครื่องหมายเท่ากับ $*จะถูกแทนที่ด้วยการขัดแย้งที่ให้มา

ฉันชอบวิธีที่สองเพราะคุณสามารถจัดกลุ่มนามแฝงทั้งหมดในไฟล์เดียว (ดูสวิตช์ "/ MACROFILE" ใน DOSKEY /?) และให้มันทำงานอัตโนมัติเมื่อใดก็ตามที่ล่ามคำสั่งเริ่มใช้การตั้งค่ารีจิสทรี (ดูที่คีย์ "AutoRun" ใน CMD /?)

ข้อเสียเปรียบของวิธีที่สองคือนามแฝงทำงานเฉพาะตอนเริ่มบรรทัดคำสั่งเท่านั้น นี่อาจเป็นปัญหาหากคุณต้องการโยงคำสั่ง ตัวอย่างเช่นCLS & CMD_Softwareจะไม่ทำงานจนกว่าคุณจะใส่นามแฝงในบรรทัดแยกต่างหากโดยใช้วงเล็บ:

CLS & (
CMD_Software
)

เมื่อใดก็ตามที่สิ่งนี้กลายเป็นปัญหาฉันเพิ่งย้อนกลับไปยังวิธีการแบทช์ไฟล์


ขอบคุณ! วิธีแรกใช้ได้ดีสำหรับฉันส่วนใหญ่เป็นเพราะฉันไม่ต้องยุ่งกับรีจิสทรีเมื่อฉันถ่ายโอนข้อมูลระหว่างคอมพิวเตอร์ นอกจากนี้ยังเป็นระเบียบและสะดวกสบายเนื่องจากคุณใช้เวลาเพียงเล็กน้อยในการสร้างไฟล์แบ็ตเมื่อคุณได้รับยูทิลิตีดังกล่าว
cyqsimon

น่าเสียดายที่ฉันต้องประกาศข้อความก่อนหน้านี้อีกครั้งอย่างรวดเร็ว ฉันพบปัญหาแปลก ๆ กับสคริปต์แบบสุ่มออกทางครึ่งผ่านการดำเนินการหลังจากใช้วิธีแรก โดยเฉพาะอย่างยิ่ง wget สำหรับ Windows ดูเหมือนจะเพลิดเพลินไปกับการฆ่าสคริปต์ของฉันหลังจากที่ดาวน์โหลดเสร็จสิ้น ฉันเสียเวลาไปสองชั่วโมงในการแก้ไขปัญหาสคริปต์ของฉันอย่างเจ็บปวด แต่ในที่สุดฉันก็ลองใส่ exes ทั้งหมดลงในไดเรกทอรีรากเดียวและปัญหาก็หายไปหมด ดังนั้นฉันขอแนะนำอย่างระมัดระวังก่อนที่ใครจะไปด้วยวิธีนี้
cyqsimon

4

นี่คือสิ่งที่ฉันใช้เพื่อแก้ไขปัญหา คัดลอกสคริปต์นี้ด้านล่างและบันทึกFIXPATH.BATลงในโฟลเดอร์ที่คุณเพิ่มลงในPATHตัวแปรสภาพแวดล้อม ตัวอย่างเช่น

C: \ Users \ myuser \ CMD_Software \

ตอนนี้เมื่อใดก็ตามที่คุณต้องการเรียกใช้โปรแกรมที่อยู่ในโฟลเดอร์ย่อยให้พูดว่า ...

C: \ Users \ myuser \ CMD_Software \ unixutils \ grep.exe
หรือ
C: \ Users \ myuser \ CMD_Software \ imagetools \ exiftool.exe

เรียกใช้fixpathก่อนจากนั้นป้อนคำสั่ง (เช่นgrepหรือexiftool) เช่น:

Microsoft Windows [เวอร์ชั่น 6.3.9600]
(c) 2013 Microsoft Corporation สงวนลิขสิทธิ์.

C: \ Users \ myuser> fixpath
C: \ Users \ myuser> exiftool


FIXPATH.BAT

setlocal EnableDelayedExpansion
cd / D% ~ dp0

สำหรับ / R %% d ใน (.) ทำ (
    ตั้งค่า "dirs =! dirs!; %% d"
)

เส้นทางเส้นทาง =%%! dirs!
(ENDLOCAL
    ตั้งค่า "ret =% PATH%"
)
cmd / K "ชื่อ [#] เส้นทางคงที่ [#] && เส้นทาง% ret%"
ทางออก / B

ขอบคุณคำตอบของ @ VonC


1

วางไดเรกทอรีย่อย "programlinks \" ไว้ใต้ ... \ CMD_Software (หรือที่อื่น ๆ จริง ๆ ) แล้วเติมมันด้วยลิงก์สัญลักษณ์หรือฮาร์ดลิงก์ไปยังไฟล์ปฏิบัติการที่คุณต้องการเข้าถึง จากนั้นรายการเดียวใน PATH for ... \ programlinks จะเพียงพอ


1
ปัญหาหลักคือถ้ามีห้องสมุดใด ๆ ที่ปฏิบัติการขึ้นอยู่กับที่ตั้งอยู่ในไดเรกทอรีเดียวกันกับ exe พวกเขาจะไม่ถูกใช้ หรืออย่างน้อยนั่นคือสิ่งที่เกิดขึ้นกับความพยายามของฉันในเรื่องนี้
zero298

คำพูดที่ยอดเยี่ยม @ zero298 ถึงแม้ว่าผมจะต้องการถ้ามีใครแน่ใจ 100% และสามารถยืนยันนี้เป็นจริงจริงเพื่อโปรดตีระฆังใน. (สาเหตุวิธีนี้เป็นอย่างอื่นที่สะอาดแน่นอนของทั้งหมด.)
เฮนริก

-1

หากคุณไม่ได้คิดอย่างนั้นคุณสามารถคัดลอกเครื่องมือบรรทัดคำสั่งไปยังไดเรกทอรี Windows \ System32 จากนั้นคุณสามารถเรียกใช้จากไดเรกทอรีใด ๆ เช่นเดียวกับ ping หรือ ipconfig

แก้ไข
หลังจากแก้ไขเล็กน้อยแล้วนี่เป็นไปได้ คุณเพียงแค่ต้องใช้เครื่องหมายอัฒภาคเพื่อคั่นไดเรกทอรีของคุณ สมมติว่าคุณมีโปรแกรมใน "folder1" และ "folder2" คุณต้องการเขียนเส้นทางของคุณเช่นนี้:

c:\folder1\;c:\folder2\;c:\folder3\;    etc....

จากนั้นคุณสามารถเรียกโปรแกรมในไดเรกทอรีใดก็ได้ตรงจากบรรทัดคำสั่ง AFAIK ไม่มีวิธีอื่นในการทำเช่นนี้เพียงแค่บรรทัดเดียว

ข้อมูลสนับสนุน: http://en.wikipedia.org/wiki/PATH_(variable)


1
มันไม่สมเหตุสมผลเลย 1. นี้จะลบเนื้อหาใด ๆ ก่อนหน้าของตัวแปรทาง 2. ตัวแปร PATH จะมีโฟลเดอร์เท่านั้นไม่ใช่ไดเรกทอรีย่อย (ผลลัพธ์ที่ต้องการ) 3. การเรียกใช้program.batตาม%PATH%\program.batที่ตรงกันข้ามกับ PATH ที่ได้รับการออกแบบมาไม่มากก็น้อย
Dennis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.