ฉันจะผนวกรายการลงในตัวแปร PATH ของระบบอย่างถาวรผ่านทางบรรทัดคำสั่งได้อย่างไร


13

ฉันต้องทำอะไร:

  • ผนวกโฟลเดอร์เข้ากับ%PATH%ตัวแปรสภาพแวดล้อมที่ระดับระบบ
  • ทำการเปลี่ยนแปลงอย่างถาวร

ฉันต้องทำยังไง:

  • การใช้พรอมต์คำสั่งหรือวิธีอื่นที่สามารถเขียนคำสั่งที่จำเป็นทั้งหมดลงใน.BATไฟล์ได้
  • การใช้เครื่องมือเท่านั้นที่จะมีให้ในการติดตั้ง Windows XP SP3 โดยไม่ต้องมีการเชื่อมต่ออินเทอร์เน็ต
  • ฉันต้องการเรียกใช้สคริปต์ในเครื่อง แต่ฉันก็สามารถเข้าถึงระบบเป้าหมายได้จากระยะไกล โปรดจำไว้ว่าฉันไม่สามารถสันนิษฐานได้ว่าบริการที่ไม่ใช่ค่าเริ่มต้น (เช่น: รีจิสตรีระยะไกล) เปิดใช้งานบนระบบ

ระบบสคริปต์ต้องทำงานกับ:

  • Windows XP SP3
  • Windows Server 2003 SP2
  • Windows 7 SP1
  • Windows Server 2008 R2 SP1

ฉันค่อนข้างคุ้นเคยกับSETคำสั่ง แต่ฉันก็รู้ด้วยว่าโดยทั่วไปแล้วมันจะเขียนทับตัวแปรที่มีอยู่แทนการผนวกเข้ากับมัน นั่นไม่เป็นที่ยอมรับ มีเครื่องมืออื่น (หรือตัวเลือกSETที่ฉันไม่ทราบ) ที่จะผนวกเข้ากับตัวแปรแทนหรือไม่ หรือฉันจำเป็นต้องวางการทำงานในสคริปต์ที่มีการคัดลอกตัวแปรที่มีอยู่ชั่วคราวไปยังตัวแปรหรือไฟล์ข้อความอื่นหรือไม่?

นอกจากนี้ยังเป็นความเข้าใจของฉันที่SETจะไม่เปลี่ยนแปลงตัวแปรอย่างถาวร ฉันเคยเห็นการกล่าวถึงSETXแต่ดูเหมือนจะไม่ได้มาพร้อมกับ Windows XP SP3 ในตัว (หรืออย่างน้อยก็ไม่สามารถใช้งานได้ในระบบที่ฉันใช้งาน) มีวิธีอื่นในการเปลี่ยนแปลงอย่างถาวรผ่านการแก้ไขรีจิสทรีหรือบางอย่าง

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


Setx ไม่ได้มาพร้อมกับ XP มันอยู่ในชุดทรัพยากรหนึ่งชุดหรือมากกว่า แต่ฉันลืมไปเลยว่าเป็นแบบไหน เพื่อให้การเปลี่ยนแปลงตัวแปรสภาพแวดล้อมถาวรที่บรรทัดคำสั่งเป็นวิธีที่ง่ายที่สุดแน่นอน คุณสามารถทำการเปลี่ยนแปลงในรีจิสทรี (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment) แต่การเปลี่ยนแปลงรีจิสทรีจากบรรทัดคำสั่งไม่ได้เป็นส่วนหนึ่งของเค้ก ถ้าฉันเป็นคุณฉันจะเขียน VBScript เพื่อทำสิ่งนี้
EBGreen

@EBGreen ฉันคุ้นเคยกับการใช้REGเพื่อทำการเปลี่ยนแปลงรีจิสทรี หากคุณต้องการโพสต์สิ่งนั้นเป็นคำตอบพร้อมคำแนะนำเกี่ยวกับวิธีการรักษาเส้นทางที่มีอยู่อย่างน้อยฉันก็จะให้คะแนนอย่างน้อย
Iszi

1
ฉันคิดว่าตามคำแนะนำของ EBGreen ฉันคิดว่าฉันต้องทำอย่างไร ตอนนี้ฉันต้องการมีวิธีบังคับรีเฟรชรีจิสตรี (และผลักดันตัวแปรสภาพแวดล้อม) โดยไม่ต้องรีบูตหรือโหลดใหม่ Explorer?
Iszi

1
@EBGreen ใช่นั่นคือสิ่งที่ดูเหมือน ถ้าคุณมีเวลาพอที่จะเข้าใจไวยากรณ์คุณช่วยโพสต์คำตอบจริง ๆ หน่อยได้ไหม? ฉันต้องการที่จะไม่เปลี่ยนเป็นคำถามที่ตอบเอง
Iszi

1
@lszi คุณควรตอบคำถามของคุณเอง คำตอบที่ดีสำหรับคำถามที่ดีนั้นมีค่าทั้งที่คุณตอบเอง
Myrddin Emrys

คำตอบ:


4

ต่อไปนี้จะเพิ่ม 'C: \ bin' ลงในเส้นทางของคุณแล้วบันทึกเส้นทางใหม่ลงในรีจิสทรี:

set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %path% /f

ฉันทดสอบสิ่งนี้กับ XP SP3 เท่านั้น แต่ควรใช้กับเวอร์ชันที่ใหม่กว่าด้วย

ฉันเดาผู้ใช้ใหม่ที่เข้าสู่ระบบก่อนที่เครื่องจะรีบูตอาจไม่ได้รับเส้นทางใหม่

แฮร์รี่พูดถูกเกี่ยวกับ% SystemRoot% หากคุณต้องการเก็บไว้คุณต้องดึงค่าเก่าสำหรับเส้นทางจากรีจิสทรีก่อน:

@echo OFF

set KEY_NAME="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
set VALUE_NAME=Path

FOR /F "usebackq skip=4 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
  set ValueName=%%A
  set ValueValue=%%C
)

if defined ValueName (

  set newPath=%ValueValue%;C:\bin

  reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %newPath% /f

  set path=%path%;C:\bin

) else (
    @echo %KEY_NAME%\%VALUE_NAME% not found.
)

2
โปรดระวังว่าสิ่งนี้จะเปลี่ยนรายการ PATH ที่มีอยู่บางส่วนโดยขยายการอ้างอิงตัวแปรสภาพแวดล้อม ตัวอย่างเช่นรายการมาตรฐาน% SystemRoot% \ system32 จะถูกแทนที่ด้วย c: \ windows \ system32 ตัวอย่างเฉพาะนี้ไม่สำคัญเนื่องจาก SystemRoot เป็นค่าคงที่ แต่ถ้ามีคนตั้งค่า PATH พร้อมการอ้างอิงกับตัวแปรสภาพแวดล้อมที่เปลี่ยนแปลงคุณจะทำลายมัน (ฉันทำสิ่งนี้กับคอมพิวเตอร์บางเครื่องของฉันเพื่อชี้ไปยังไดเรกทอรี bin ใน Sun JDK ปัจจุบัน)
38911 Harry

สคริปต์ใหม่ไม่ทำงานตามที่เขียนหากพา ธ มีวงเล็บเช่นการอ้างอิงใด ๆ ถึง Program Files (x86)
Harry Johnston

-1
set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d ^%path^% /f

2
แม้ว่าคำสั่งเปล่าจะมีประโยชน์ แต่เราคาดว่าจะมีคำถาม / คำตอบเพิ่มขึ้นอีกเล็กน้อย โปรดอธิบายว่าสิ่งนี้ตอบคำถาม OPs ได้อย่างไร
Ƭᴇcʜιᴇ007
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.