ฉันจะรีเฟรชเชลล์ Windows cmd ได้อย่างไรหลังจากฉันแก้ไขตัวแปรสภาพแวดล้อมของฉัน?
เช่นใน bash ฉันสามารถทำ "source ~ / .bashrc"
ฉันจะรีเฟรชเชลล์ Windows cmd ได้อย่างไรหลังจากฉันแก้ไขตัวแปรสภาพแวดล้อมของฉัน?
เช่นใน bash ฉันสามารถทำ "source ~ / .bashrc"
คำตอบ:
ขึ้นอยู่กับการตั้งค่าตัวแปรสภาพแวดล้อมของคุณ ตัวอย่างเช่นหากคุณใช้คำสั่ง "SET" ในบรรทัดคำสั่งจะมีผลกับอินสแตนซ์ปัจจุบันเท่านั้น ในทางกลับกันคำสั่งเช่น "SETX" จะปรับค่าของตัวแปรสภาพแวดล้อมอย่างถาวร SETX จะทำให้มั่นใจได้ว่าอินสแตนซ์ cmd ในอนาคตทั้งหมดจะเห็นการอัปเดต มันจะไม่ส่งผลกระทบต่อสภาพแวดล้อมในท้องถิ่น
หากตัวแปรสภาพแวดล้อมถูกตั้งค่าโดยแอปพลิเคชันอื่นและไม่ได้รับการอัปเดตมักจะง่ายที่สุดในการรีสตาร์ทกระบวนการ "explorer.exe" ออกจากระบบและกลับมาใหม่หรือรีบูต โดยพื้นฐานแล้วคุณเพียงแค่ต้องบอกนักสำรวจเพื่อโหลดตัวแปรสภาพแวดล้อมอีกครั้ง หากเป็นแอพพลิเคชั่นที่คุณพัฒนาขึ้นเช่นตัวติดตั้งตรวจสอบให้แน่ใจว่ากำลังเรียกSendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");
ใช้ สิ่งนี้บอกให้ explorer รีเฟรชแคชของตัวแปรสภาพแวดล้อม
นี่เป็นสิ่งสำคัญเนื่องจากแอปพลิเคชันที่เปิดใช้งานโดยกระบวนการอื่นสืบทอดตัวแปรสภาพแวดล้อมจากแม่ของพวกเขา เช่นถ้าคุณเปิด cmd จาก explorer คุณจะได้รับตัวแปรเมื่อ explorer เห็นมัน
การตั้งค่าและการกู้คืนสภาพแวดล้อมหลักใน Windows เป็นสิ่งที่ผู้ใช้ BartPE ใช้เวลาอย่างมาก
สภาพแวดล้อมหลักจะถูกเก็บไว้ในรีจิสทรี แต่เชลล์ explorer อ่านสิ่งนี้ตามที่อยู่ของมัน จากที่นี่จะถูกส่งไปยังแต่ละเซสชั่น cmd.exe
ชุดส่งผลกระทบต่อสภาพแวดล้อม cmd เท่านั้น SETX ช่วยให้คุณสามารถเปลี่ยนสภาพแวดล้อมหลัก แต่การตั้งค่าไม่ได้สะท้อนให้เห็นในสภาพแวดล้อมท้องถิ่น
CONSET และ 4NT ของ Frank Westlake สามารถดึงข้อมูลจากรีจิสตรี แต่ไม่มีสวิทช์สำหรับสภาพแวดล้อมหลักโดยเฉพาะ
โดยปกติแล้วหน้าต่างที่โหลดจะติดตามการตั้งค่าไปยังรีจิสทรีในขณะที่หน้าต่างที่โหลดผ่านมินต์ (เช่น WinPE) ไม่ได้ ดังนั้นการตั้งค่าการลงทะเบียนและการอ่านรีจิสทรีจะทำงานได้ทั้งสองอย่าง แต่โดยปกติแล้ว Windows ที่ถูกบู๊ตจะเห็นการตั้งค่าและส่งต่อไปยังโปรแกรม cmd, exe ใหม่
ขึ้นอยู่กับที่คุณ "ตั้งค่า" ตัวแปรสภาพแวดล้อมของคุณ ตัวอย่าง bash ที่เทียบเท่ากับของคุณจะเป็นเช่นนี้:
ไฟล์: env.bat
set FOO=bar
และตอนนี้คุณรีเฟรช
% call env.bat
แต่ฉันคิดว่าคุณทำผ่าน windows-system-settings-dialog (หรือชื่อของมัน) ผลลัพธ์ของสิ่งนี้คือคุณได้ทำการเปลี่ยนแปลงรีจิสทรีจริง การตั้งค่ารีจิสทรีเหล่านี้จะถูกแมปเข้ากับกระบวนการเมื่อคุณเริ่มกระบวนการใหม่
ดังนั้นคุณสามารถเริ่มกระบวนการใหม่ (cmd.exe ในกรณีของคุณ) หรือคุณสามารถอ่านรีจิสตรีคีย์ที่แสดงถึงการเปลี่ยนแปลงที่คุณต้องการ คุณยังสามารถเขียนสคริปต์. bat / .cmd เล็กน้อยซึ่งรับสภาพแวดล้อมจากรีจิสตรีและเปลี่ยนแปลงสภาพแวดล้อมปัจจุบัน (ถ้าอารมณ์กระทบฉันฉันจะทำสิ่งนี้หลังอาหารกลางวัน)
ตอนนี้ง่ายกว่ามากโดยไม่ต้องรีสตาร์ทเชลล์:
RefreshEnv.bat
RefreshEnv.bat
สังเกตว่าตัวแปรสภาพแวดล้อมที่เพิ่มเข้ามาใหม่นั้นมีอยู่ในอินสแตนซ์ Command / Powershell ใหม่ใด ๆ เพื่อตรวจสอบการรีเฟรช