การตั้งค่าหรือแก้ไขตัวแปรสภาพแวดล้อม (ทั้งระบบ) ใน cmd.exe


13

ฉันกำลังมองหาวิธีที่สะดวกในการเพิ่มและ / หรือแก้ไขและ / หรือลบตัวแปรสภาพแวดล้อมจากบรรทัดคำสั่ง โดยเฉพาะอย่างยิ่งฉันพบว่าตัวเองบางครั้งในสถานการณ์เมื่อฉันต้องเพิ่มตัวแปรบางอย่างใน cmd.exe

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

การเปลี่ยนแปลงควรเป็นแบบถาวรไม่ใช่เฉพาะช่วงเวลาของcmdเซสชัน


1
ผมคิดว่าปัญหาหนึ่งที่คุณจะพบคือการเปลี่ยนแปลงมากที่สุดเพื่อถาวร , ทั้งระบบตัวแปรสภาพแวดล้อมต้องออกจากระบบ / เข้าสู่ระบบ (หรือรีบูต) สำหรับเซสชั่นของผู้ใช้เพื่อใช้ค่าปรับเปลี่ยน
ต้มตุ๋น Quixote

คำตอบ:


8

วิธีการที่โรงเรียนเก่าของการจัดการตัวแปรรีจิสทรีโดยตรงกับคำสั่ง reg เป็นเงิน นี่คือวิธีที่คุณทำ:

reg add HKCU\Environment /v PATH /d "%addonpath%;%path%" /f

ใส่ลงในสคริปต์บรรทัดเดียวชื่อ apath.bat ที่มีลักษณะดังนี้:

@echo off
reg add HKCU\Environment /v PATH /d "%~dp0;%path%" /f

จากนั้นสิ่งที่คุณต้องระบุคือเส้นทางของไดเรกทอรีใหม่ที่คุณเพิ่มเมื่อเรียกสคริปต์และคุณโทรออกใน:

เช่น: apath.bat% addonpath%

แม้ว่า Hinch ถูกต้อง วิธีที่ดีที่สุดในการทำหากคุณใช้ Vista หรือสูงกว่าคือการใช้คำสั่ง SETX ซึ่งได้รับการออกแบบมาเพื่อให้เราสามารถเผยแพร่ตัวแปรสภาพแวดล้อมโดยไม่ต้องเสี่ยงกับการจัดการรีจิสทรีโดยตรงด้วยคำสั่ง reg ที่จะช่วยให้คุณประหยัดเครื่อง คุณจัดการตัวแปร ENV ได้มากพอที่จะใช้งานได้


คำสั่งนี้ต้องการการรีสตาร์ทหรือไม่
Juzer Ali

ไม่ แต่คุณต้องใช้กระบวนการใหม่ (cmd)
ไมค์

1
สำหรับฉันมันไม่จำเป็นต้องรีสตาร์ท? ทำไม? ฉันใช้ Windows XP, sp3
Changwang จาง

15

คุณสามารถใช้ setx

ตัวแปรผู้ใช้:

SETX PATH "%PATH%;C:\MyDir"

ตัวแปรระบบ:

SETX PATH "%PATH%;C:\MyDir" /M

ฉันเชื่อว่า SETX มีให้บริการตั้งแต่ Vista แต่ฉันใช้ XP
René Nyffenegger

คุณอาจสามารถหนีจากการคัดลอก setx.exe จากเครื่อง Vista อาจจะไม่ทำงาน แต่มันอาจจะ
ต้มตุ๋น Quixote

2
SETX เป็นส่วนหนึ่งของเครื่องมือทรัพยากรสำหรับ Windows Server 2003 คุณสามารถเพิ่มลงในไดเรกทอรี system32 ของคุณหรือเพิ่มเส้นทางอื่น ๆ (ไก่ไข่!)
Paradroid

ฉันต้องการส่วน / M เพื่อให้ฉันสามารถปรับเปลี่ยนตัวแปรระบบไม่ใช่ผู้ใช้ ขอบคุณ!
Andrei Sfat

ทั้งคำสั่งที่ระบุนั้นผิด ทำไม? Windows จะรักษาค่า PATH ไว้สองค่า: ทั้งระบบและต่อผู้ใช้ เมื่อคุณพิมพ์คุณจะเห็นพวกเขารวมกันเช่นecho %PATH% <system path>;<user path>ดังนั้นคำสั่งแรกจะบังคับให้รายการปัจจุบันของเส้นทางของระบบปรากฏในเส้นทางผู้ใช้ (ซึ่งไม่เลวร้าย) ในขณะที่คำสั่งที่สองจะทำให้รายการปัจจุบันของเส้นทางผู้ใช้ปรากฏในเส้นทางของระบบ (ซึ่งไม่เป็นที่ยอมรับ)
Sasha

1

คุณสามารถใช้HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorunรีจิสตรีคีย์เพื่อชี้ไปที่ไฟล์แบตช์เพื่อให้คุณสามารถทำการเปลี่ยนแปลงแบบกึ่งถาวรโดยไม่ต้องเจาะเข้าไปในกล่องโต้ตอบการตั้งค่าอาร์เคน


เท่าที่ฉันรู้ว่าจะมีผลเฉพาะกับการเรียกใช้งานตามมาของ cmd.exe (โดยไม่ต้องตั้งค่าสถานะ / d) แต่ไม่ใช่ทั้งระบบหรือกระบวนการอื่น ๆ (เรียกใช้ภายหลัง)
René Nyffenegger

ถูกต้อง. ฉันพบว่ามีข้อได้เปรียบหมายความว่าคุณสามารถทำสิ่งต่าง ๆ ได้มากขึ้นโดยไม่ต้องกังวลกับกระบวนการต่าง ๆ ที่ไม่รู้ว่าจะทำอย่างไร อย่างไรก็ตามมันจะทำงานในการโต้ตอบที่รวดเร็วซึ่งเป็นสิ่งที่ดีเสมอ: P
Phoshi

1

หากคุณไม่ต้องการใช้ GUI (เช่นในแผงควบคุม, ระบบ, ขั้นสูง, ตัวแปรสภาพแวดล้อม, เส้นทาง) คุณสามารถREGตั้งค่าHKCU\Environment\PATHได้

  • ปรับปรุง %PATH%
  • REG ADD HKCU\Environment /v PATH /t REG\_EXPAND\_SZ /d "%PATH%" /f

/fกองกำลังเขียนทับของค่าที่มีอยู่เพื่อให้คุณไม่ต้องโต้ตอบตอบคำถาม

แก้ไข: %PATH%จำเป็นต้องเสนอราคา

แก้ไข:เป็นที่น่าสังเกตว่าอาจต้องมีการรีบูตหรือเข้าสู่ระบบอีกครั้งก่อนที่จะมีผล ในขณะที่เปลี่ยนมันใน GUI จะมีผลทันที (สำหรับcmd.exeเซสชันใหม่)

การอ้างอิง: http://support.microsoft.com/kb/104011

ดังที่ระบุไว้ในข้อมูลอ้างอิงหากคุณต้องการเขียนรหัสคุณสามารถส่ง WM_SETTINGCHANGE และควรหลีกเลี่ยงข้อกำหนดการเข้าสู่ระบบ / ออกจากระบบ


นั่นจะเป็นประโยชน์อย่างมาก. แต่ถ้าฉันค้นหาตัวแปรนั้นมันจะไม่ส่งคืนสิ่งใด
PA

การบริหารทรัพยากรมนุษย์ บน XP Pro SP3 REG QUERY HKCU\Environment /v PATHภาษาอังกฤษที่ฉันได้รับเส้นทางของฉันด้วย:
opello

มันเป็นเส้นทางเฉพาะของผู้ใช้ไม่ใช่เส้นทางทั่วทั้งระบบ ไม่แน่ใจว่าที่หนึ่งมีชีวิตอยู่ พวกเขาสามารถตั้งค่าเป็นสิ่งเดียวกัน แต่มักจะมีสิ่งที่แยกต่างหาก (และเส้นทางการทำงานของคุณคือการรวมกันของทั้งสอง)
ต้มตุ๋น Quixote

ใช่มันอยู่ใน HKCU บทความ Microsoft KB ที่เชื่อมโยงมีทั้งที่ตั้งรีจิสทรี
opello

1
นี่เป็นสิ่งที่ฉันกำลังมองหา ... หากมีวิธีส่ง WM_SETTINGCHANGE จาก cmd.exe ด้วย
René Nyffenegger

0

เปลี่ยนเส้นทางในกระบวนการ cmd.exe ปัจจุบันได้ง่าย:

PATH c:\MyNewDirectory;%PATH%

คุณสามารถทำ HELP PATH เพื่อขอความช่วยเหลือได้ที่คำสั่ง PATH


1
สิ่งนี้ไม่ดีสำหรับเซสชันหรือไม่
JL

ใช่สิ่งนี้จะไม่คงอยู่ในเซสชัน
John T

JL ถูกต้องและฉันกำลังมองหาวิธีแก้ไขปัญหาอย่างถาวร ฉันได้แก้ไขคำถามของฉันแล้ว
René Nyffenegger

0

สำหรับการเปลี่ยนแปลงทั่วทั้งระบบอย่างถาวรอย่างแท้จริงคุณต้องการใช้แผงควบคุมระบบ (aka My Computer -> คุณสมบัติ -> ขั้นสูง -> ตัวแปรสภาพแวดล้อมสำหรับ WinXP) การตั้งค่าที่มีผลกระทบต่อทั้งระบบของคุณรวมถึงโปรแกรม GUI ใน Explorer เชลล์

หากคุณต้องการการเปลี่ยนแปลงเหล่านี้ในcmd.exeเชลล์คุณสามารถรัน batchfile ที่ตั้งค่าเมื่อใดก็ตามที่คุณเริ่มหน้าต่าง cmd.exe คำตอบของ Phoshiกล่าวถึงHKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorunซึ่งดูเหมือนว่าเป็นตัวเลือกที่ยอดเยี่ยม - ง่ายต่อการเปลี่ยนแปลงเล็กน้อยและรันใหม่จาก commandline หากคุณต้องการ แต่สิ่งนี้จะไม่ส่งผลกระทบต่อหน้าต่าง GUI หรือเชลล์ Explorer

ฉันแปลกใจจริง ๆ ที่Sysinternalsไม่มียูทิลิตี้ที่มีความสามารถในการทำสิ่งนี้ บางทีPStools อื่นสามารถทำได้


0

หลายวิธีในการทำเช่นนี้ REG ADD เป็นหนึ่งหรือ REG IMPORT (ใช้ไฟล์. REG ที่ส่งออกจากคอมพิวเตอร์เครื่องอื่น) SETX / M เป็นอีกเรื่องหนึ่ง คุณสามารถผลักมันออกได้โดยใช้การตั้งค่านโยบายกลุ่ม (วิธีที่ง่ายที่สุดสำหรับคอมพิวเตอร์จำนวนมากในแบบแฮนด์ดาวน์)


0

ความคิดอื่นที่ไม่ได้กล่าวถึงที่นี่สร้างสคริปต์ autohotkey ที่จะเปิดใช้งานแผงควบคุมและป้อนให้คุณ มันทำงานได้ดีถ้าคุณเป็นผู้ใช้ AHK อยู่แล้ว :-)

https://autohotkey.com/board/topic/63210-modify-system-path-gui/

สิ่งที่เกี่ยวกับการแก้ไข hklm / system / currentcontrolset001 / control / session manager / environment: key path? แต่คีย์เดียวกันอยู่ภายใต้ hklm / system / currentcontrolset002 และ hklm / system / currentcontrolset ดูเหมือนว่าสิ่งนี้อาจถูกต้องต่อที่นี่: /programming/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.