วิธีหนึ่งที่ฉันคิดได้คือใช้ตัวแปรสภาพแวดล้อมอื่น ๆ เพื่อจัดเก็บเส้นทางบางส่วน ตัวอย่างเช่นถ้าคุณมี
C:\this_is_a\long_path\that_appears\in_multiple_places\subdir1;
C:\this_is_a\long_path\that_appears\in_multiple_places\subdir2;
จากนั้นคุณสามารถสร้างตัวแปรสภาพแวดล้อมใหม่เช่น
SET P1=C:\this_is_a\long_path\that_appears\in_multiple_places
หลังจากนั้นเส้นทางเดิมของคุณจะกลายเป็น
%P1%\subdir1;
%P1%\subdir2;
แก้ไข:อีกทางเลือกหนึ่งคือการสร้างbin
ไดเร็กทอรีที่เก็บ.bat
ไฟล์ที่ชี้ไปยัง.exe
ไฟล์ที่เหมาะสม
แก้ไข 2:ความคิดเห็นของ Ben Voigt สำหรับคำตอบอื่นกล่าวว่าการใช้ตัวแปรสภาพแวดล้อมอื่น ๆ ตามที่แนะนำอาจไม่ลดความยาว%PATH%
เนื่องจากจะขยายก่อนที่จะจัดเก็บ นี่อาจเป็นความจริงและฉันยังไม่ได้ทดสอบ อีกทางเลือกหนึ่งคือการใช้แบบฟอร์ม 8dot3 สำหรับชื่อไดเร็กทอรีที่ยาวขึ้นเช่นC:\Program Files
โดยทั่วไปจะเทียบเท่ากับC:\PROGRA~1
. คุณสามารถใช้dir /x
เพื่อดูชื่อที่สั้นกว่า
แก้ไข 3:การทดสอบง่ายๆนี้ทำให้ฉันเชื่อว่า Ben Voigt ถูกต้อง
set test1=hello
set test2=%test1%hello
set test1=bye
echo %test2%
ในตอนท้ายของเรื่องนี้คุณจะเห็นการส่งออกมากกว่าhellohello
byehello
แก้ไข 4:ในกรณีที่คุณตัดสินใจใช้ไฟล์แบตช์เพื่อกำจัดพา ธ บางเส้นทาง%PATH%
คุณอาจกังวลเกี่ยวกับวิธีส่งอาร์กิวเมนต์จากไฟล์แบตช์ของคุณไปยังไฟล์ปฏิบัติการของคุณเพื่อให้กระบวนการนั้นโปร่งใส (กล่าวคือคุณจะไม่สังเกตเห็นความแตกต่างใด ๆ ระหว่างการเรียกไฟล์แบตช์และการเรียกใช้ไฟล์ปฏิบัติการ) ฉันไม่มีประสบการณ์ในการเขียนไฟล์แบตช์มากนัก แต่ดูเหมือนว่าจะใช้ได้ดี
@echo off
rem This batch file points to an executable of the same name
rem that is located in another directory. Specify the directory
rem here:
set actualdir=c:\this_is\an_example_path
rem You do not need to change anything that follows.
set actualfile=%0
set args=%1
:beginloop
if "%1" == "" goto endloop
shift
set args=%args% %1
goto beginloop
:endloop
%actualdir%\%actualfile% %args%
ตามกฎทั่วไปคุณควรระมัดระวังในการเรียกใช้ไฟล์แบตช์จากอินเทอร์เน็ตเนื่องจากคุณสามารถทำสิ่งต่างๆได้ทุกประเภทด้วยไฟล์แบตช์เช่นการฟอร์แมตฮาร์ดไดรฟ์ของคุณ หากคุณไม่เชื่อถือโค้ดด้านบน (ที่ฉันเขียน) คุณสามารถทดสอบได้โดยการแทนที่บรรทัด
%actualdir%\%actualfile% %args%
กับ
echo %actualdir%\%actualfile% %args%
ตามหลักการแล้วคุณควรรู้ว่าทุกบรรทัดทำอะไรก่อนที่จะเรียกใช้