ปัญหาการตั้งค่าตัวแปรสภาพแวดล้อม (โดยเฉพาะ PATH) และการใช้ cd ใน cmd ใน windows 10


1

ฉันกำลังติดตามกวดวิชาเพื่อตั้งค่า Apache Storm (นั่นเป็นเพียงบริบท - มันไม่สำคัญสำหรับความผิดพลาดของฉัน)

ดังนั้นจึงบอกให้ฉันตั้งค่าตัวแปรสภาพแวดล้อมบางอย่างโดยเฉพาะ%JAVA_HOME%และ%STORM_HOME%เป็นC:\Java\jdk1.8.0_60\และC:\storm-0.9.1-incubating-SNAPSHOT-12182013\ตามลำดับ ฉันไม่เคยทำสิ่งนี้มาก่อนเลยดังนั้นฉันจึงค้นหาวิธีการนี้และฉันก็วิ่ง:

C:\>setx %JAVA_HOME% C:\JAVA\jdk1.8.0_60\

และมันให้: SUCCESS: Specified value was saved.

จากนั้นฉันก็:

C:\>setx %STORM_HOME% C:\storm-0.9.1-incubating-SNAPSHOT-12182013\

และมันก็ให้สิ่งเดียวกัน: SUCCESS: Specified value was saved.

จากนั้นกวดวิชากล่าวว่าการเพิ่มการ%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\; PATHฉันเข้ามาC:\>PATHเพื่อดูว่ามันคืออะไรในปัจจุบันและมันให้:

PATH=C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\

ดังนั้นฉันคิดว่าฉันสามารถเพิ่มได้โดยการทำ

C:\>setx PATH C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\; 

ในคำอื่น ๆ ผมก็พยายามโทรsetxในPATHและฉันจะตั้งค่ากับสิ่งที่มันเป็นอยู่ในปัจจุบันและมีสิ่งที่กวดวิชากล่าวต่อท้าย มันให้SUCCESS: Specified value was saved.อย่างไรก็ตามเมื่อฉันป้อน:

C:\>PATH

มันคืนค่าเดิม (สิ่งที่ฉันพยายามต่อท้ายไม่ได้อยู่ที่นั่น) ฉันลองวิธีอื่น ฉันวิ่ง

C:\>PATH=%PATH%;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;

จากนั้นเมื่อฉันป้อนC:\>PATHมันจะส่งคืน PATH แบบเต็มพร้อมสิ่งที่ฉันต้องการผนวกต่อท้าย

ปัญหาที่ฉันเผชิญอยู่ในขณะนี้คือการใช้ตัวแปรเหล่านี้ เมื่อฉันเข้า

C:\>cd %STORM_HOME%

มันบอกว่าThe system cannot find the path specified.ฉันพยายามรีสตาร์ทคอมพิวเตอร์ แต่PATHได้รีเซ็ตและยังคงมีข้อผิดพลาดเดิมอยู่

คำตอบ:


1

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

จากเอกสารช่วยเหลือของ SETX ( setx /?):

 2) On a local system, variables created or modified by this tool
    will be available in future command windows but not in the
    current CMD.exe command window.

มีสองวิธีในการแก้ไขปัญหานี้ สิ่งที่ง่ายคือตามที่เอกสารระบุเริ่มต้นอินสแตนซ์ใหม่ของ CMD มันง่ายพอ แต่แล้วคุณจะไม่มีประวัติการใช้คำสั่งของคุณ ฯลฯ สิ่งที่ซับซ้อนกว่านั้นคือการตั้งค่าตัวแปรสภาวะแวดล้อมท้องถิ่น (ใช้setคำสั่ง) วิธีที่ดีที่สุดในการทำเช่นนี้คือการใช้setก่อนแล้วจึงเรียกsetxใช้ตัวแปรสภาพแวดล้อมปัจจุบัน นี่คือตัวอย่างจากสิ่งที่คุณทำด้านบน:

REM Set the local version of JAVA_HOME
set JAVA_HOME=C:\JAVA\jdk1.8.0_60\
REM Set the local version of STORM_HOME
set STORM_HOME=C:\storm-0.9.1-incubating-SNAPSHOT-12182013\
REM Append the new values to PATH
set PATH=%PATH%;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;
REM Do whatever checks you want to do to confirm that those are set correctly
cd %STORM_HOME%
REM Now, save the current (local) values of the environment variables
REM to persistent storage (registry)
setx JAVA_HOME %JAVA_HOME%
setx STORM_HOME %STORM_HOME%
setx PATH %PATH%

สังเกตการใช้%ตัวอักษร คุณใช้มันเมื่อคุณไปขยายตัวแปรสภาพแวดล้อมไม่ใช่เมื่อคุณต้องการอ้างถึงหนึ่ง setxเส้นดังกล่าวข้างต้นมีการประมวลผล "ตั้งสภาพแวดล้อมการใช้งานกว้าง JAVA_HOME ตัวแปรกระบวนการนี้ค่าท้องถิ่นปัจจุบันของ JAVA_HOME" ซึ่งเทียบเท่ากับพูดว่า 'ตั้งค่าสภาพแวดล้อมถาวร JAVA_HOME ตัวแปรC:\JAVA\jdk1.8.0_60\' เพราะนั่นคือสิ่ง% JAVA_HOME% ขยายไปใน กระบวนการปัจจุบัน


ขอบคุณสำหรับสิ่งนี้! ผมเข้าใจดีขึ้นมากในขณะนี้และจะทำงานมากเกินไป :)
ดึง

0

ทำไม SETX ถึงไม่อัพเดท PATH ของฉัน

เส้นทาง setx C: \ ProgramData \ Oracle \ Java \ javapath; C: \ Windows \ system32; C: \ Windows; C: \ Windows \ System32 \ Wbem; C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \;% STORM_HOME % \ bin;% JAVA_HOME% \ bin; C: \ Python27; C: \ Python27 \ Lib \ เว็บไซต์แพคเกจ \; C: \ Python27 \ Scripts \;

setxไวยากรณ์ของคุณผิด:

  • ใส่เครื่องหมายคำพูด"ล้อมรอบพารามิเตอร์ที่สอง ('ค่า')

    ควรอ้างอิงพารามิเตอร์ที่สองหากมีช่องว่างและ%PATH%มักจะมีช่องว่าง

คุณควรใช้:

setx PATH "%PATH%;%STORM_HOME%\bin;%JAVA_HOME%\bin"

หรือ:

setx PATH "%STORM_HOME%\bin;%JAVA_HOME%\bin;%PATH%"

วากยสัมพันธ์

SETX [/s Computer [Credentials]] Variable Value [/m]

SETX [/s Computer [Credentials]] [Variable] /k RegistryPath [/m]

SETX [/s Computer [Credentials]] /f FileName {[Variable] {/a L,T | /r oL,oT "SearchString"} [/m] | /x} [/d Delimiters]

ที่มาsetx


อ่านเพิ่มเติม

  • ดัชนี AZ ของบรรทัดคำสั่ง Windows CMD - การอ้างอิงที่ยอดเยี่ยมสำหรับทุกสิ่งที่เกี่ยวข้องกับบรรทัด Windows cmd
  • setx - ตั้งค่าตัวแปรสภาพแวดล้อมอย่างถาวรสามารถใช้ SETX เพื่อตั้งค่าตัวแปรสภาพแวดล้อมสำหรับเครื่อง (HKLM) หรือผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน (HKCU)

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