在 Windows 10 中设置环境变量(尤其是 PATH)并在 cmd 中使用 cd 时出现问题

在 Windows 10 中设置环境变量(尤其是 PATH)并在 cmd 中使用 cd 时出现问题

我正在关注教程设置 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\; 

换句话说,我刚刚尝试调用setxPATH并将其设置为当前值,并将教程中的内容附加到末尾。但是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它返回了完整的路径,其中包含我想要附加的内容。

我现在面临的问题是使用这些变量。当我输入

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% 在当前进程中扩展为的值。

答案2

为什么 SETX 没有更新我的 PATH

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%几乎总是包含空格。

您应该使用:

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]

来源设置


进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 设置- 永久设置环境变量,SETX 可用于为机器(HKLM)或当前登录用户(HKCU)设置环境变量。

相关内容