【问题标题】:Updating Path instead of overwrite cmd更新路径而不是覆盖 cmd
【发布时间】:2012-10-26 20:39:01
【问题描述】:

我正在运行以下 cmd 来设置我的系统环境变量。

call C:\Windows\system32>reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
\Session Manager\Environment" /v JAVA_HOME /t REG_EXPAND_SZ /d "C:\Program Files\Java
\jdk1.6.0_37"

我想对我的路径做类似的事情,但我不想覆盖那里的值,我只想添加它们。运行上述命令会覆盖还是更新?如果它覆盖了我将如何让它更新?

【问题讨论】:

  • 您当然可以在高级系统设置中更改Path 吗?不过我可能没抓住重点。
  • 这对于一台计算机来说很简单,但我在多台机器上设置了多个变量。只是想通过编写一个批处理脚本来为自己节省一些时间。
  • 如果这些机器是域的成员,Group Policy Preferences 可以说是处理这个问题的最佳方式。
  • 正确,但我不想更新我不需要的其他 300 台计算机。

标签: windows-7 cmd


【解决方案1】:

是的,REG ADD 将覆盖现有值,但我写了一个脚本应该可以帮助你。

请注意delims= 后面的字符:这些不是空格,是单个制表符(ASCII #9)。

@ECHO OFF
REM Declare all variables as local.
SETLOCAL

SET GET_PATH=REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path
SET SET_PATH=REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /f /d

REM Get %PATH% from registry and filter REG output (drop all but actual %PATH% value).
FOR /F "tokens=3* delims=   " %%P IN ('%GET_PATH% ^| FINDSTR Path') DO SET RESULT=%%P

REM Check for the trailing semicolon.
IF "%RESULT:~-1%" == ";" (SET SEMICOLON=) ELSE (SET SEMICOLON=;)

REM Add new directories to %PATH%. 
SET DIRS=C:\Foo\Bar;E:\Bar\Baz
SET RESULT=%RESULT%%SEMICOLON%%DIRS%

REM Save result to the registry.
%SET_PATH% "%RESULT%"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多