คุณจะหลีกเลี่ยงการเติม PATH Environment Variable ใน Windows มากเกินไปได้อย่างไร


115

ฉันอยากทราบว่าคุณใช้วิธีใดในการจัดการไฟล์ปฏิบัติการในระบบของคุณ ตัวอย่างเช่นฉันมีเกือบทุกอย่างที่สามารถเข้าถึงได้ผ่านทางบรรทัดคำสั่ง แต่ตอนนี้ฉันมาถึงขีด จำกัด ของสตริงพา ธ ดังนั้นฉันจึงไม่สามารถเพิ่มผบ.

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


ทำไมคุณถึงใช้เส้นทางมากมาย? โดยทั่วไปเส้นทางจะใช้สำหรับ dir ทั่วไปเมื่อแอปของคุณต้องแชร์ขยาย object / app / lib กับผู้อื่น ใช้มากทำให้แอปเริ่มช้าลง คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับวิธีที่คุณใช้สร้างสภาพแวดล้อมเส้นทาง var ได้ไหม
pinichi

1
สวัสดี pinichi แอปพลิเคชันจำนวนมากใช้มาตรฐาน "C: \ Program File \ AppNAme \ ... " และในกรณีของฉันแอปพลิเคชันนี้จำนวนมากสามารถทำงานในรูปแบบบรรทัดคำสั่งหรือจำเป็นต้องเข้าถึงแอปอื่น ๆ ( ตัวอย่างเช่นไฟล์ปฏิบัติการของ Miktex ที่โปรแกรมแก้ไข Tex คาดว่าจะมีอยู่) ดังนั้นจึงต้องอยู่ใน PATH ฉันไม่อยากรู้แนวทางที่ดีกว่านี้เพราะของฉันไม่ยั่งยืน
mjsr

1
เครื่องมือนี้จะบีบอัดเส้นทาง ผลลัพธ์เป็นที่น่าประทับใจ: uweraabe.de/Blog/2014/09/09/the-garbled-path-variable/#more-337
InTheNameOfScience

คำตอบ:


84

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

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%

ในตอนท้ายของเรื่องนี้คุณจะเห็นการส่งออกมากกว่าhellohellobyehello

แก้ไข 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%

ตามหลักการแล้วคุณควรรู้ว่าทุกบรรทัดทำอะไรก่อนที่จะเรียกใช้


1
แบบฟอร์ม 8dot3 ใช้งานได้ดี แต่สำหรับไดเร็กทอรีจริงไม่ใหญ่เกินไปตัวอย่างเช่น "C: \ Program Files (x86) \ Microsoft Visual Studio 2008 SDK \ VisualStudioIntegration \ Tools \ Sandcastle \ ProductionTools \" อีกสิ่งหนึ่งที่ช่วยประหยัดได้เล็กน้อยคือในฐานะผู้ใช้ฉันสามารถสร้างตัวแปร PATH จาก System Path และเพิ่ม Dir อื่น ๆ วิธีการทั้งหมดนี้เป็นประเภท "กระชับสตริงนั้น" แต่เราสามารถมีไดเร็กทอรีไบนารีแบบรวมศูนย์เหมือนที่ Unix ได้หรือไม่?
mjsr

1
อืมเกี่ยวกับไดเร็กทอรีที่ยาวมากฉันคิดว่าตรงกันข้ามคือยิ่งไดเร็กทอรียาวเท่าไหร่คุณก็จะบันทึกอักขระได้มากขึ้นโดยใช้รูปแบบ 8dot3 หากนำทางเข้าไปได้ยากcmdโปรดทราบว่าคุณสามารถใช้*บันทึกการพิมพ์ได้ dir /x pro*ดังนั้นสำหรับตัวอย่างเช่นจากรากพิมพ์ใน คุณจะเห็นไดเร็กทอรีที่คุณต้องการพร้อมกับชื่อ 8dot3 จากนั้นใช้cdเพื่อนำทางไปและทำซ้ำขั้นตอน
Mitch Schwartz

1
เกี่ยวกับ UNIX คุณมี$PATHที่ทำงานคล้ายกับ%PATH%ใน Windows มากดังนั้นฉันไม่แน่ใจว่าประเด็นของคุณคืออะไรกันแน่ ตามแบบแผนชื่อไดเร็กทอรี UNIX มักจะสั้นกว่าใน Windows และด้วยเหตุ$PATHนี้จึงมีแนวโน้มที่จะสั้นลงด้วย
Mitch Schwartz

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

2
ส่วน 'แก้ไข 4' ของคุณซับซ้อนเกินไปสำหรับการส่งอาร์กิวเมนต์ไปยังไฟล์ปฏิบัติการ ดูคำตอบของ Michael Burr
Dave Andersen

83

สิ่งนี้จะแยกวิเคราะห์ตัวแปรสภาพแวดล้อม% PATH% ของคุณและแปลงแต่ละไดเร็กทอรีเป็นชื่อย่อที่เทียบเท่ากันแล้วนำกลับมารวมกัน:

@echo off

SET MyPath=%PATH%
echo %MyPath%
echo --

setlocal EnableDelayedExpansion

SET TempPath="%MyPath:;=";"%"
SET var=
FOR %%a IN (%TempPath%) DO (
    IF exist %%~sa (
        SET "var=!var!;%%~sa"
    ) ELSE (
        echo %%a does not exist
    )
)

echo --
echo !var:~1!

รับเอาต์พุตและอัปเดตตัวแปร PATH ในตัวแปรสภาพแวดล้อม


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

2
สิ่งนี้มีประโยชน์เช่นกันเพราะมันบอกฉันเกี่ยวกับไดเร็กทอรีที่ไม่มีอยู่จริงทั้งหมดในเส้นทางของฉันที่สะสมอยู่ตลอดเวลา
Nate Glenn

27
Rapid Environment Editor เป็นอีกวิธีหนึ่งในการดำเนินการนี้ มันเน้นไดเรกทอรีที่ไม่มีอยู่จริงและมีตัวเลือก "แปลงเส้นทางยาวเป็นสั้น"
Russell Gallop

3
@RussellGallop: ครับท่านเป็นเครื่องมือที่ยอดเยี่ยม
elo80ka

1
หมายเหตุ: %%~saคำพูดที่ขาดหายไปหลังจากที่ปิด ฉันพยายามอัปเดตคำตอบ แต่จะไม่ยอมให้ฉันเว้นแต่ฉันจะเปลี่ยนตัวอักษร 6 ตัว
zr870

28

หากคุณใช้ windows vista ขึ้นไปคุณสามารถสร้างลิงก์สัญลักษณ์ไปยังโฟลเดอร์ได้ ตัวอย่างเช่น:

mklink /d C:\pf "C:\Program Files"

จะสร้างลิงค์ให้c:\pfเป็นprogram filesโฟลเดอร์ของคุณ ฉันกำจัดอักขระ 300 ตัวออกจากเส้นทางของฉันโดยใช้เคล็ดลับนี้


นี่เป็นทางเลือกที่ดีในการใช้ตัวแปรสภาพแวดล้อมเพื่อแสดงเส้นทางบางส่วน
porcus

1
สิ่งนี้จะช่วยได้มากขึ้นอย่างแน่นอน แต่ถ้าคุณต้องการโซลูชันที่ "ถูกต้อง" (รองรับ?) มากกว่านี้คุณสามารถแทนที่อินสแตนซ์ของ c:\Program Filesและc:\Program Files (x86)ด้วยตัวแปรที่กำหนดไว้ล่วงหน้า%ProgramFiles%และ%ProgramFiles(x86)% tenforums.com/tutorials/ ... สิ่งเหล่านี้จะบันทึกอักขระเพียงไม่กี่ตัว แต่ถ้าคุณกำลังจะใช้ PATH ให้ได้มากที่สุดก็อาจเป็นความแตกต่างได้ สำหรับเรื่องนั้นฉันจะสร้าง% pf% และ% pfx% ที่แก้ไขเส้นทางที่ถูกต้อง ขอบคุณสำหรับความคิด! :)
rainabba

ปัญหาในการใช้ตัวแปรเช่น% pf% และ% pfx% คือคุณได้รับปัญหาเดียวกันกับการสร้างลิงก์สัญลักษณ์ - การอัปเดตซอฟต์แวร์อาจเพิ่มสิ่งต่างๆเข้าไปในตัวแปรพา ธ อีกครั้ง ปัญหาอื่น ๆ ในการใช้ตัวแปรเช่นนั้นก็คือการเขียนสคริปต์สิ่งต่างๆรอบตัวหรือเรียกดูจาก explorer นั้นไม่รวดเร็วและง่ายดาย ด้วยวิธีการที่ฉันอธิบายคุณสามารถเปิด c: \ PF ได้อย่างแท้จริง Windows เห็นว่ามันเหมือนกับโฟลเดอร์ดังนั้นคุณสามารถเขียน bat หรือ powershell กับมันได้อย่างง่ายดายเช่นกัน
bmg002

10

เผื่อว่าใครสนใจ ...

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

ตัวอย่างเช่นหากฉันต้องการพัฒนา C ++ ใน Eclipse ฉันจะทำ:

> initmingw
> initeclipse
> eclipse

นอกจากนี้ยังมีประโยชน์ในการหลีกเลี่ยงความขัดแย้งระหว่างไฟล์ปฏิบัติการที่มีชื่อเดียวกัน (เช่นคอมไพเลอร์ C ++ และ D ซึ่งทั้งคู่มี make.exe)

ไฟล์แบตช์ของฉันมักจะมีลักษณะดังนี้:

@echo off
set PATH=C:\Path\To\My\Stuff1;%PATH%
set PATH=C:\Path\To\My\Stuff2;%PATH%

ฉันพบว่าแนวทางนี้ค่อนข้างสะอาดและยังไม่พบปัญหาใด ๆ


7

โดยทั่วไปฉันไม่ต้องกังวลเกี่ยวกับเรื่องนี้ (ฉันไม่ได้พบกับขีด จำกัด ขนาดเส้นทาง - ฉันไม่รู้ด้วยซ้ำว่ามีอะไรอยู่ในระบบ Windows สมัยใหม่) แต่นี่คือสิ่งที่ฉันอาจทำเพื่อหลีกเลี่ยงการใส่ไดเร็กทอรีของโปรแกรม เส้นทาง:

  • ยูทิลิตี้บรรทัดคำสั่งส่วนใหญ่จะถูกส่งไปยังc:\utilไดเร็กทอรีที่อยู่บนเส้นทาง
  • มิฉะนั้นฉันจะเพิ่มไฟล์ cmd / batch แบบธรรมดาลงในc:\utilไดเร็กทอรีที่มีลักษณะดังนี้:

    @"c:\program files\whereever\foo.exe" %*
    

ซึ่งโดยพื้นฐานแล้วจะสร้างนามแฝงสำหรับคำสั่ง มันไม่จำเป็นต้องสมบูรณ์แบบ บางโปรแกรมยืนยันที่จะอยู่ในเส้นทางจริง ๆ (ซึ่งหายากแล้วในปัจจุบัน) และโปรแกรมอื่น ๆ ที่พยายามเรียกใช้อาจไม่ถูกต้อง แต่สำหรับการใช้งานส่วนใหญ่ทำงานได้ดี

แต่โดยทั่วไปฉันไม่ต้องกังวลเกี่ยวกับการหลีกเลี่ยงการเพิ่มไดเรกทอรีลงในเส้นทาง


เมื่อคุณเริ่มทำตาม "เส้นทาง" นี้โปรดระวังว่าสคริปต์ชุดงานไม่สามารถเรียกสคริปต์ชุดงานอื่นได้หากไม่มีไวยากรณ์ "CALL [bat]" ดังนั้นหากคุณต้องการให้แน่ใจว่า exe ที่ส่งต่อหรือไม่ถูกเรียกจากแบ็ตให้ใช้ "call php script.php" แทนแค่ "php script.php" (ซึ่งใช้ได้ทั้งสองวิธี) เหตุผลที่ดีในการใช้ bat dispatcher คือการป้องกันไม่ให้ชื่อ PATH ขัดแย้งกัน (หลายเวอร์ชันของ exe เดียวกัน)
131

@ 131: ช่วยอธิบายความหมายของ 'เส้นทางนี้' ได้ไหม คุณหมายถึงเส้นทางไฟล์เฉพาะจากตัวอย่างหรือไม่? หรือเป็นวิธีการทั่วไปที่คำตอบนี้แนะนำ?
หรือผู้ทำแผนที่

@ORMapper: เมื่อ 131 พูดว่า 'เมื่อคุณเริ่มทำตาม "เส้นทางนี้" เขาหมายถึง' เมื่อคุณใช้เทคนิคนี้ '
Michael Burr

1
ตามที่คุณเขียนไว้ "โปรแกรมอื่น ๆ ที่พยายามเรียกใช้โปรแกรมอาจไม่พบอย่างถูกต้อง" - ในประเด็น: น่าเสียดายที่สามารถส่งการเรียกอัตโนมัติไปยังแอปพลิเคชันบรรทัดคำสั่งได้เช่นโดยการสร้างเครื่องมือเช่น NAnt นอกหลักสูตร ยาที่มีการกล่าวอ้างคำสั่งที่มีใช้ได้cmd /cแต่ในทางกลับกันวิธีการสร้างสคริปต์จะกลายเป็นของ Windows เฉพาะ: / ฉันได้ถามเกี่ยวกับว่าในคำถามที่แยกต่างหาก
หรือผู้ทำแผนที่

5

แนวคิดอื่น: ใช้ DIR / X เพื่อกำหนดชื่อสั้น ๆ ที่สร้างขึ้นสำหรับชื่อไฟล์ที่ไม่ใช่ 8dot3 จากนั้นใช้สิ่งเหล่านี้ใน% PATH% ของคุณ

ตัวอย่างเช่น 'C: \ Program Files' กลายเป็น 'C: \ PROGRA ~ 1'


1
อ๊ะฉันเพิ่งรู้ว่ามีการแนะนำโดย @Mitch แล้ว ฉันจะให้เขา +1 สำหรับสิ่งนั้น :)
Android Eve


2

ฉันเขียนและใช้สตรีมมาตรฐาน (stdin / stderr / stdout) & รหัสออกจากโปรแกรม PROXY เป็นประจำทุกครั้ง (เรียกว่าผู้มอบหมายงานhttps://github.com/131/dispatcher )

โปรแกรม CLI ทั้งหมดที่ฉันใช้ (node, php, python, git, svn, rsync, plink ... ) ฉันใช้เป็นไฟล์ exe เดียวกัน (ประมาณ 10kb ซึ่งฉันแค่ตั้งชื่อต่างกัน) ที่ฉันใส่ไว้เหมือนกัน ไดเรกทอรี ไฟล์ข้อความที่ชัดเจนคงที่จำลองจะทำ "ชื่อไฟล์พร็อกซีเพื่อการแมป exe จริง"

Dispatcher ใช้การจัดการกระบวนการ win32 API ระดับต่ำเพื่อให้มีความโปร่งใสอย่างแท้จริง

การใช้ซอฟต์แวร์นี้ฉันมีไดเร็กทอรีเสริมเพียงหนึ่งรายการใน PATH ของฉันสำหรับโปรแกรมทั้งหมดที่ฉันอาจใช้


1

การสร้างโฟลเดอร์ c: \ bin เพิ่มไปยังพา ธ ของคุณและฮาร์ดลิงก์อย่างที่คุณบอกอาจทำให้สตริงสั้นลง อาจเพิ่มตัวแปร pf ให้กับระบบ vars ด้วยค่า c: \ Program Files จากนั้นแทนที่ c: \ Program Files ด้วย% pf% ในเส้นทาง

แก้ไข:

สร้างไดรฟ์เสมือน ย่อย p: "c: \ program files"


1
ฉันคิดว่าเส้นทางจะมีตัวแปรขยายซึ่งในกรณีนี้จะไม่สั้นลง
Ben Voigt

0

ฉันทำตามขั้นตอนเหล่านี้เพื่อให้จัดการรายการได้:

  1. สร้างผู้ใช้ที่แตกต่างกันสำหรับการใช้งานแพ็คเกจซอฟต์แวร์ที่แตกต่างกัน ตัวอย่าง: (ก) สร้างเว็บสำหรับผู้ใช้เพื่อให้มีซอฟต์แวร์พัฒนาเว็บทั้งหมด (b) สร้างฐานข้อมูลผู้ใช้เพื่อทำให้พร้อมใช้งานชุดซอฟต์แวร์ฐานข้อมูลและคลังข้อมูลทั้งหมด โปรดจำไว้ว่าซอฟต์แวร์บางตัวอาจสร้างมากกว่าหนึ่งรายการ หรือบางครั้งฉันแบ่งสิ่งนี้เป็น oracle เฉพาะและ MSSQL เฉพาะและผู้ใช้เฉพาะ oracle ฉันใส่ MySQL / PostgreSQL, tomcat, wamp, xamp ทั้งหมดลงในบัญชีผู้ใช้ webr

  2. หากเป็นไปได้ให้ติดตั้งแพ็คเกจทั่วไปเช่น office, photoshop, .. เป็นระบบเฉพาะสำหรับผู้ใช้ทั้งหมดและแพ็คเกจพิเศษตามที่ผู้ใช้เฉพาะ แน่นอนฉันต้องเข้าสู่ระบบผู้ใช้ที่แตกต่างกันและติดตั้งพวกเขา ซอฟต์แวร์บางตัวอาจไม่มีตัวเลือกนี้ หากไม่มีตัวเลือก "ติดตั้งสำหรับผู้ใช้นี้เท่านั้น" ให้ติดตั้งสำหรับทั้งระบบ

  3. ฉันหลีกเลี่ยงการติดตั้งโปรแกรมในโฟลเดอร์ Program File (x86) หรือใน Program File ฉันติดตั้งลงในไดเร็กทอรีฐานเสมอ ตัวอย่างเช่น MySQL 64 บิตไปที่ "C: \ mysql64" และ MySQL 32 บิตไปที่โฟลเดอร์ "C: \ mysql" ฉันมักจะถือว่าการเพิ่มคำต่อท้าย 64 สำหรับซอฟต์แวร์ 64 บิตเท่านั้น ถ้าไม่มีคำต่อท้ายแสดงว่าเป็น 32 บิต ฉันทำตามสิ่งเดียวกันกับ Java และอื่น ๆ วิธีนี้เส้นทางของฉันจะสั้นลงไม่รวม "C: \ Program File (x86)" สำหรับซอฟต์แวร์บางตัวอาจจำเป็นต้องแก้ไขไฟล์คอนฟิกูเรชันเพื่อแสดงว่าไฟล์. exe อยู่ตรงไหน เฉพาะโปรแกรมที่ต้องการติดตั้งลงใน "C: \ Program File (x86)" เท่านั้นที่จะติดตั้งลงในโฟลเดอร์นั้น ฉันจำไว้เสมอว่าต้องย่อชื่อให้สั้นลง ฉันหลีกเลี่ยงหมายเลขเวอร์ชันเช่น tomcat / release / version-2.5.0.3 รายละเอียดดังกล่าว ถ้าฉันต้องการรุ่นรู้ ฉันสร้างไฟล์ตามชื่อเวอร์ชันและใส่ลงในโฟลเดอร์ tomcat โดยทั่วไปจะย่อลิงค์ให้มากที่สุด

  4. รวมแบตช์ใด ๆ เพื่อแทนที่ลิงก์แบบย่อไปยังพา ธ หากขั้นตอนข้างต้นทั้งหมดผ่านขีด จำกัด ของ Windows

จากนั้นล็อกอินเข้าสู่การใช้งานเฉพาะ (โปรแกรมมือถือหรือฐานข้อมูล / คลังข้อมูลหรือการพัฒนาเว็บ .. .. ) และทำงานที่เกี่ยวข้อง

คุณยังสามารถสร้างหน้าต่างเสมือนภายใน windows ตราบเท่าที่คุณมีสำเนาระบบปฏิบัติการที่ได้รับอนุญาตเพียงชุดเดียวคุณสามารถสร้างหน้าต่างเสมือนจริงหลาย ๆ หน้าต่างด้วยคีย์เดียวกันได้ คุณสามารถใส่แพ็กเกจเฉพาะสำหรับงานเฉพาะในเครื่องนั้นได้ คุณต้องเปิด VM แยกกันทุกครั้ง แพ็คเกจที่ต้องใช้หน่วยความจำบางอย่างเช่นผู้ผลิตภาพยนตร์แอนิเมชั่น 3 มิติทั้งหมดควรใส่ไว้ในเครื่องหลักไม่ใช่ VM เนื่องจาก VM จะมี RAM เพียงบางส่วนเท่านั้น มันเป็นความเจ็บปวดในการบูตแต่ละ VM แม้ว่า


0

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

นอกจากนี้ยังมีบริบทบางอย่างที่การเรียกใช้สคริปต์นี้ทำลายสิ่งต่าง ๆ (เช่นใน github หรือ cygwin shell) ดังนั้นฉันจึงเพิ่มไฟล์ที่มีรายการพา ธ ที่หากพรอมต์คำสั่งเริ่มทำงานในนั้นตัวแปรพา ธ จะไม่ ไม่เปลี่ยนแปลงผ่านสคริปต์เริ่มต้นที่โดยปกติจะอัปเดตเส้นทาง

@echo off

:: Modify these to the actual paths of these two files
set dontSetupFile=C:\Users\Yams\Dontsetup.txt
set pathFile=C:\Users\Yams\Path.txt

:: Retrieve the current path (for determining whether or not we should append to our path)
set curDir=%cd%

:: Be done if the current path is listed in the dontSetupFile
SetLocal EnableDelayedExpansion
for /F "delims=" %%i in (%dontSetupFile%) do (
    if "%%i"=="%curDir%" GOTO AllDone
)



:: Append the pathFile to our current PATH
set pathAppend=
for /F "delims=" %%i in (%pathFile%) do (set pathAppend=!pathAppend!%%i)

set PATH=%PATH%;%pathAppend%


:: The only way to actually modify a command prompt's path via a batch file is by starting
::   up another command prompt window. So we will do this, however, if this script is
::   automatically called on startup of any command prompt window, it will infinately 
::   recurse and bad things will happen.

:: If we already ran, we are done
if "%yams%"=="onion" GOTO AllDone

:: Otherwise, flag that we just ran, and then start up a new command prompt window
::   with this flag set
set yams=onion

cmd \K set PATH=%PATH%;

:: When that command prompt exits, it will load back up this command prompt window, and
::   then the user will need to exit out of this as well. This causes this window to
::   automatically exit once the cmd it just spawned is closed.
exit()

:: Path is set up, we are done!
:AllDone
@echo on

และ Path.txt จะมีลักษณะดังนี้

C:\Program Files (x86)\Google\google_appengine;
C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
C:\Program Files\Microsoft SQL Server\110\Tools\Binn;
C:\Program Files\Microsoft DNX\Dnvm;
C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit;

ในขณะที่ Dontsetup.txt จะมีลักษณะดังนี้

C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit
C:\Program Files (x86)\Git\cmd
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

ในการทำให้สิ่งนี้ทำงานโดยอัตโนมัติเมื่อเริ่มต้นให้เปิด regedit ไปที่ HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Command Processor จากนั้นคลิกขวาทางขวาแล้วกดใหม่ -> Multi-String Value ตั้งชื่อว่า AutoRun ตั้งค่าเป็น

C:\Users\Yams\setUpPath.bat

หรือที่ใดก็ตามที่คุณเก็บไฟล์แบตช์ไว้ด้านบน


0

ไม่ได้ลอง แต่การแยก PATH เป็นส่วน ๆ จะทำงานและรวมเข้ากับตัวแปรสุดท้ายได้หรือไม่

ตัวอย่างเริ่มต้นสมมติว่าคุณมีบางอย่างเช่น

PATH={LONGPATH1};{LONGPATH2};....{2048th char}....{LONGPATH_N-1};{LONGPATH_N}

แทนที่จะสร้าง:

_PATH1 = {LONGPATH1};{LONGPATH2};....{2048 char}
_PATH2 = {2049th char}...{LONGPATH_N-1};{LONGPATH_N}
rem // may be more parts
PATH = %_PATH1%;%_PATH2%
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.