Board logo

标题: [系统相关] 批处理使用wmic修改windows环境变量的问题 [打印本页]

作者: 不知名    时间: 2015-7-20 10:18     标题: 批处理使用wmic修改windows环境变量的问题

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. path
  4. for /f "skip=1 tokens=* delims=~" %%i in ('wmic ENVIRONMENT where "name='path'" get variablevalue') do (
  5. echo.%%i
  6. echo.--
  7. )
  8. wmic ENVIRONMENT where name='path' get variablevalue|findstr /C:"C:\Program Files\MySQL\MySQL Server 5.5\bin" >nul&&goto step2
  9. :step1
  10. echo.不包含
  11. wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="C:\Program Files\MySQL\MySQL Server 5.5\bin;%path%"
  12. goto step3
  13. :step2
  14. echo.已包含
  15. :step3
  16. path
  17. wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%%RUNHOME%%\dll;%path%"
  18. path
  19. goto end
复制代码
上面的代码有3个问题:
1.显示的问题。for执行显示的会显示两次“--”,并且中间还有个空行。而且,%%i后面如果再要求显示其他内容,则会把从头覆盖第一行显示的前面相应数量的字符。
2.设置环境变量之后,再次显示path发现没有变化(windows属性中可以看到变化),这样的后果就是,进行第二次修改环境变量,会把第一次的执行结果冲掉了,最终只修改了最后一次的环境变量,前面的都没了。
3.修改环境变量之后,path原有的%SystemRoot%类似的都会丢失百分号,被解析出绝对路径(此问题不是很大)

请大神指点一下^_^
作者: flyinnet9    时间: 2015-7-20 11:12

无责任解答
1.1 for回显,可以在for中设置变量赋值,在for外echo
1.2 echo.会输出回车符,使用echo %变量%
1.3 没明白在说什么
2 可以在bat中使用cls清屏命令
3 大神在哪里??
作者: aa77dd@163.com    时间: 2015-7-20 13:06

本帖最后由 aa77dd@163.com 于 2015-7-20 13:31 编辑

回复 1# 不知名
当前 cmd 进程的 path 是不会自动更新的, 打开新的 cmd 进程 才会加载 path 的新值, 或者用 wmic 获取实时的新值
wmic 的输出中有 不可见字符, 有些地方需要对它们做必要的处理
以下代码 在 win7 旗舰版 sp1 64位 及 win 2003 企业版 sp2 测试通过
  1. @echo off & setlocal enableDelayedExpansion
  2. mode 160
  3. echo view current PATH value:
  4. wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" get VariableValue
  5. set "newpath=C:\Program Files\MySQL\MySQL Server 5.5\bin;%%RUNHOME%%\dll"
  6. set newpath
  7. wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" get VariableValue | findstr /I /C:"%newpath%" >nul && (ECHO The newpath value already be included) || (call :update)
  8. echo; &echo;
  9. pause
  10. exit
  11. :update
  12.     for /f "skip=1 tokens=*" %%a in ('wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" get VariableValue') do (
  13.         for /f "delims=" %%b in ("%%a") do (
  14.             set pth=%%~b
  15.             set "pp=!pth!;!newpath!"
  16.             set "pp=!pp:  ;=;!"
  17.             echo, & echo The value will update to PATH: & echo [!pp!] & echo; & echo;
  18.             wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" set VariableValue='!pp!'
  19.             
  20.             echo; & echo;
  21.             
  22.             wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" get VariableValue
  23.         )
  24.         echo; & echo;
  25.     )
  26. exit /b
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2