รีเฟรชตัวแปรสภาพแวดล้อม


12

ฉันจะรีเฟรชเชลล์ Windows cmd ได้อย่างไรหลังจากฉันแก้ไขตัวแปรสภาพแวดล้อมของฉัน?

เช่นใน bash ฉันสามารถทำ "source ~ / .bashrc"


มีคำตอบที่ดีสำหรับคำถามเดียวกันใน Stackoverflow
Hugh Allen

ปิดคอนโซลและเปิดคอนโซลใหม่
Synetech

คำตอบ:


4

ขึ้นอยู่กับการตั้งค่าตัวแปรสภาพแวดล้อมของคุณ ตัวอย่างเช่นหากคุณใช้คำสั่ง "SET" ในบรรทัดคำสั่งจะมีผลกับอินสแตนซ์ปัจจุบันเท่านั้น ในทางกลับกันคำสั่งเช่น "SETX" จะปรับค่าของตัวแปรสภาพแวดล้อมอย่างถาวร SETX จะทำให้มั่นใจได้ว่าอินสแตนซ์ cmd ในอนาคตทั้งหมดจะเห็นการอัปเดต มันจะไม่ส่งผลกระทบต่อสภาพแวดล้อมในท้องถิ่น

หากตัวแปรสภาพแวดล้อมถูกตั้งค่าโดยแอปพลิเคชันอื่นและไม่ได้รับการอัปเดตมักจะง่ายที่สุดในการรีสตาร์ทกระบวนการ "explorer.exe" ออกจากระบบและกลับมาใหม่หรือรีบูต โดยพื้นฐานแล้วคุณเพียงแค่ต้องบอกนักสำรวจเพื่อโหลดตัวแปรสภาพแวดล้อมอีกครั้ง หากเป็นแอพพลิเคชั่นที่คุณพัฒนาขึ้นเช่นตัวติดตั้งตรวจสอบให้แน่ใจว่ากำลังเรียกSendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");ใช้ สิ่งนี้บอกให้ explorer รีเฟรชแคชของตัวแปรสภาพแวดล้อม

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


1

การตั้งค่าและการกู้คืนสภาพแวดล้อมหลักใน Windows เป็นสิ่งที่ผู้ใช้ BartPE ใช้เวลาอย่างมาก

สภาพแวดล้อมหลักจะถูกเก็บไว้ในรีจิสทรี แต่เชลล์ explorer อ่านสิ่งนี้ตามที่อยู่ของมัน จากที่นี่จะถูกส่งไปยังแต่ละเซสชั่น cmd.exe

ชุดส่งผลกระทบต่อสภาพแวดล้อม cmd เท่านั้น SETX ช่วยให้คุณสามารถเปลี่ยนสภาพแวดล้อมหลัก แต่การตั้งค่าไม่ได้สะท้อนให้เห็นในสภาพแวดล้อมท้องถิ่น

CONSET และ 4NT ของ Frank Westlake สามารถดึงข้อมูลจากรีจิสตรี แต่ไม่มีสวิทช์สำหรับสภาพแวดล้อมหลักโดยเฉพาะ

โดยปกติแล้วหน้าต่างที่โหลดจะติดตามการตั้งค่าไปยังรีจิสทรีในขณะที่หน้าต่างที่โหลดผ่านมินต์ (เช่น WinPE) ไม่ได้ ดังนั้นการตั้งค่าการลงทะเบียนและการอ่านรีจิสทรีจะทำงานได้ทั้งสองอย่าง แต่โดยปกติแล้ว Windows ที่ถูกบู๊ตจะเห็นการตั้งค่าและส่งต่อไปยังโปรแกรม cmd, exe ใหม่


0

ขึ้นอยู่กับที่คุณ "ตั้งค่า" ตัวแปรสภาพแวดล้อมของคุณ ตัวอย่าง bash ที่เทียบเท่ากับของคุณจะเป็นเช่นนี้:

ไฟล์: env.bat

set FOO=bar

และตอนนี้คุณรีเฟรช

% call env.bat

แต่ฉันคิดว่าคุณทำผ่าน windows-system-settings-dialog (หรือชื่อของมัน) ผลลัพธ์ของสิ่งนี้คือคุณได้ทำการเปลี่ยนแปลงรีจิสทรีจริง การตั้งค่ารีจิสทรีเหล่านี้จะถูกแมปเข้ากับกระบวนการเมื่อคุณเริ่มกระบวนการใหม่

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


0

ตอนนี้ง่ายกว่ามากโดยไม่ต้องรีสตาร์ทเชลล์:

  1. เปิดเมนูเริ่มและค้นหา RefreshEnv.bat
  2. วิ่ง RefreshEnv.bat

สังเกตว่าตัวแปรสภาพแวดล้อมที่เพิ่มเข้ามาใหม่นั้นมีอยู่ในอินสแตนซ์ Command / Powershell ใหม่ใด ๆ เพื่อตรวจสอบการรีเฟรช


ตอนนี้คุณหมายถึงอะไร ตั้งแต่รุ่นไหน? ไฟล์ bat นั้นพร้อมใช้งานกับ windows หรือไม่?
MátéJuhász
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.