标题: [系统相关] 批处理使用wmic修改windows环境变量的问题 [打印本页]
作者: 不知名 时间: 2015-7-20 10:18 标题: 批处理使用wmic修改windows环境变量的问题
- @echo off
- setlocal enabledelayedexpansion
- path
- for /f "skip=1 tokens=* delims=~" %%i in ('wmic ENVIRONMENT where "name='path'" get variablevalue') do (
- echo.%%i
- echo.--
- )
-
- wmic ENVIRONMENT where name='path' get variablevalue|findstr /C:"C:\Program Files\MySQL\MySQL Server 5.5\bin" >nul&&goto step2
-
- :step1
- echo.不包含
- wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="C:\Program Files\MySQL\MySQL Server 5.5\bin;%path%"
- goto step3
- :step2
- echo.已包含
-
- :step3
- path
- wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%%RUNHOME%%\dll;%path%"
- path
- 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 测试通过- @echo off & setlocal enableDelayedExpansion
- mode 160
-
- echo view current PATH value:
- wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" get VariableValue
-
- set "newpath=C:\Program Files\MySQL\MySQL Server 5.5\bin;%%RUNHOME%%\dll"
- set newpath
- wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" get VariableValue | findstr /I /C:"%newpath%" >nul && (ECHO The newpath value already be included) || (call :update)
-
- echo; &echo;
-
- pause
- exit
-
-
- :update
- for /f "skip=1 tokens=*" %%a in ('wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" get VariableValue') do (
-
- for /f "delims=" %%b in ("%%a") do (
- set pth=%%~b
-
- set "pp=!pth!;!newpath!"
-
- set "pp=!pp: ;=;!"
-
- echo, & echo The value will update to PATH: & echo [!pp!] & echo; & echo;
-
- wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" set VariableValue='!pp!'
-
- echo; & echo;
-
- wmic ENVIRONMENT where "name='path' and username='<SYSTEM>'" get VariableValue
- )
-
- echo; & echo;
- )
- exit /b
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |