全球主机交流论坛
标题:
辛辛苦苦写了批处理,还是不能刷新到系统
[打印本页]
作者:
ptc123
时间:
2021-12-6 10:21
标题:
辛辛苦苦写了批处理,还是不能刷新到系统
本意是为了快速设置java环境,wmic还是不能刷新系统,看样子只能使用
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, LPARAM(PChar('Environment')), SMTO_NORMAL, 4000, ret)
非要编译喽
大神有啥办法,通过脚本刷新?
[url=home.php?mod=space&uid=20206]@echo[/url] off
REM dyydyyBatchFile
REM 获得当前文件的目录
setlocal enabledelayedexpansion
cls
echo =------------------------=
set CDIR=%~dp0
set CDIR="C:\jdk1.8"
goto :MAIN
:: 函数定义
:getWmicVar
:: %1=name,%2=username
set xname=%1
set xname=!xname:"=!
echo %2 | findstr "system" >nul && (
set uname=^<system^>
) || (
set uname=%2
set uname=!uname:"=!
)
set cmd=wmic ENVIRONMENT where "name='%xname%' and username='%uname%'" get VariableValue
set ret=
::下面的执行结果有多行,就会执行多次 %%a会轮换
set/a i=0
for /f "delims=" %%a in ('%cmd%') do (
::跳过第行标头 第1行
if !i! equ 1 (
set ret=%%a
)
set /a i=i+1
)
:: 返回的变量有尾随空格,处理掉
:: 最后一个可能是回车,删除一个char,果然
set ret=!ret:~0,-1!
:innerLoop
if "!ret:~-1!"==" " (
set ret=!ret:~0,-1!
goto :innerLoop
)
goto :EOF
:setWmicVar
:: %1=name,%2=value,%3=username 第二个参数为空时仅删除这个环境变量
set xname=%1
set xname=!xname:"=!
set xvalue=%2
set xvalue=!xvalue:"=!
echo %3 | findstr "system" >nul && (
set uname=^<system^>
) || (
set uname=%3
set uname=!uname:"=!
)
wmic ENVIRONMENT where "name='%xname%' and username='%uname%'" delete
if not "%xvalue%"=="" (
wmic ENVIRONMENT create name="%xname%" , username="%uname%" , VariableValue="%xvalue%"
)
set ret=%errorlevel%
goto :EOF
[url=home.php?mod=space&uid=55828]@rem[/url] ------------------------下面是主入口---------------------------------
:MAIN
set tousr=
set cusr=
set /p tousr="绿化安装到当前用户还是整个系统(默认为安装到当用用户环境):"
if "%tousr%"=="" (
for /f %%a in ('whoami') do set cusr=%%a
set cusr=!cusr:\=\\!
) else (
:: <system>作为参数传不过去,因为有特殊字符<>
set cusr="system"
)
:: 读取指定用户的path环境变量
call :getWmicVar "path" "%cusr%"
set pth=%ret%
if "%pth%"=="" goto :EOF
set newPath=
:loop1
for /f "tokens=1,* delims=;" %%a in ("%pth%") do (
set apth=%%a
set pth=%%b
)
@REM 卸载 ,并清除了无效路径
if not "%apth:~0,11%"=="%%JAVA_HOME%%" if exist %apth% (
set newPath=%newPath%%apth%;
)
if defined pth goto :loop1
call :getWmicVar "JAVA_HOME" "%cusr%"
set javahomefind=%ret%
if "%javahomefind%" == "" (
:: 安装
call :setWmicVar "JAVA_HOME" "%CDIR%" "%cusr%"
:: 下面的 %%JAVA_HOME%% 经过传递给子过程,被脱掉了一层%,所以还需要再加一层
call :setWmicVar "CLASSPATH" ".;%%%%JAVA_HOME%%%%\lib\dt.jar;%%%%JAVA_HOME%%%%\lib\tools.jar;" "%cusr%"
call :setWmicVar "path" "%newPath%;%%%%JAVA_HOME%%%%\bin;%%%%JAVA_HOME%%%%\jre\bin" "%cusr%"
echo "JAVA环境 设置完毕"
) else (
:: 卸载
call :setWmicVar "JAVA_HOME" "" "%cusr%"
call :setWmicVar "CLASSPATH" "" "%cusr%"
call :setWmicVar "path" "%newPath%" "%cusr%"
echo "JAVA_HOME 卸载完毕"
)
pause
复制代码
作者:
sRGB
时间:
2021-12-6 10:29
本帖最后由 sRGB 于 2021-12-6 10:30 编辑
java 语法太啰嗦,看java代码就想睡觉
把 JRE 部署到Docker 容器中,使用 Docker 管理停止启动会简单点吧
作者:
啦啦
时间:
2021-12-6 10:31
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 全球主机交流论坛 (https://sunk.eu.org/)
Powered by Discuz! X3.4