找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30205|回复: 9

[文件操作] [已解决]批处理中调用setx设置新的环境变量后如何实现在当前cmd窗口及时生效

[复制链接]
发表于 2016-12-6 10:14:42 | 显示全部楼层 |阅读模式
本帖最后由 jsbob 于 2016-12-7 14:48 编辑

关于设置环境变量需要重启
我在论坛看了很多设置环境变量不需要重启的方法,最终使用的是STEX方法,但是设置完需要打开一个新的cmd才会使用新的环境变量。

我使用start cmd /k "java -version"这种方法新打开一个cmd再执行,还是获取不到新的环境变量。有没有其他办法打开一个新的cmd窗口再执行命令?

评分

参与人数 2PB -1 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样
pcl_test -3 勿发笼统的标题

查看全部评分

发表于 2016-12-6 10:34:53 | 显示全部楼层
你这种问题百度就有,都是问了十几年的问题了

评分

参与人数 1技术 +1 收起 理由
codegay + 1 1

查看全部评分

 楼主| 发表于 2016-12-6 10:41:31 | 显示全部楼层
回复 2# Nsqs


    百度了半天也没找到啊,只要是从当前cmd窗口执行命令打开的新cmd窗口都不行
发表于 2016-12-6 10:51:21 | 显示全部楼层
把你设置环境变量的完整代码发出来看看
 楼主| 发表于 2016-12-6 11:20:04 | 显示全部楼层

  1. SETX /M JAVA_HOME "D:\CaseQualityCheck\Java\jdk1.7.0_79"
  2. SETX /M PATH "%%JAVA_HOME%%\bin;%Path%"
  3. start cmd /k "java -version"
复制代码
执行java -version时就找不到java,但是自己重新打开一个cmd就可以
发表于 2016-12-6 12:01:05 | 显示全部楼层
回复 5# jsbob


    有关修改环境变量的帖子太多了,自己找不到就怪百度难找.实际上就是自己不想找,
发表于 2016-12-6 13:25:48 | 显示全部楼层
回复 5# jsbob


test.bat
  1. SETX /M JAVA_HOME "D:\CaseQualityCheck\Java\jdk1.7.0_79"
  2. SETX /M PATH "%%JAVA_HOME%%\bin;%Path%"
  3. set "JAVA_HOME=D:\CaseQualityCheck\Java\jdk1.7.0_79"
  4. set "PATH=%%JAVA_HOME%%\bin;%Path%"
  5. java -version
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2016-12-6 20:45:43 | 显示全部楼层
回复 7# GNU


    可以用,谢谢
发表于 2025-12-29 10:23:51 | 显示全部楼层
  1. SETX /M PATH "新路径;%Path%"
复制代码

我试了下这样写,它有个副作用,会把用户变量path 中的路径 追加到 系统变量path 中,但是存在个总长度限制,1024,如果本身添加了一些环境变量,这时候就容易超出限制,导致失败。



我改写了下 帖子 https://www.bathome.net/thread-8762-1-1.html 第32-36行代码。

添加新路径到 环境变量(系统变量)。
  1. @echo off
  2. rem "右键管理员执行,重启生效。"
  3. for %%a in (
  4. "D:\test"
  5. ) do (
  6.         for /f "skip=1 delims=" %%b in ('wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" get VariableValue') do (
  7.                 for /f "delims=" %%c in ("%%b") do (
  8.                         set new=%%~a
  9.                         set old=%%c
  10.                         setlocal enabledelayedexpansion
  11.                         wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" set VariableValue='!old:~0,-2!;!new!\'
  12.                         endlocal
  13.                 )
  14.         )
  15. )
  16. pause
复制代码
发表于 2025-12-30 12:06:00 | 显示全部楼层


直接用setx是有变量值1K的长度限制。
但用注册表复刻的方法 reg add ... 可突破此限, 用户级永久变量的注册表
位置是 "HKCU\Environment",系统级永久变量的注册表位置是 "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"。


您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:06 , Processed in 0.032055 second(s), 14 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表