设为首页
收藏本站
切换到宽版
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
论坛
BBS
排行榜
Ranklist
搜索
搜索
热搜:
香港vps
香港VPS
amh
机柜
vps
分销
VPS
域名出售
火车头
云主机
不限流量
香港服务器
美国服务器
香港
全能空间
whmcs
digitalocean
本版
帖子
用户
MJJ论坛
»
论坛
›
主机综合交流
›
美国VPS综合讨论
›
辛辛苦苦写了批处理,还是不能刷新到系统 ...
返回列表
查看:
1162
|
回复:
2
[Windows VPS]
辛辛苦苦写了批处理,还是不能刷新到系统
[复制链接]
ptc123
ptc123
当前离线
积分
7301
发表于 2021-12-6 10:21:45
|
显示全部楼层
|
阅读模式
本意是为了快速设置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
sRGB
当前离线
积分
42360
发表于 2021-12-6 10:29:29
|
显示全部楼层
本帖最后由 sRGB 于 2021-12-6 10:30 编辑
java 语法太啰嗦,看java代码就想睡觉
把 JRE 部署到Docker 容器中,使用 Docker 管理停止启动会简单点吧
回复
支持
反对
举报
啦啦
啦啦
当前离线
积分
187
发表于 2021-12-6 10:31:29
来自手机
|
显示全部楼层
提示:
作者被禁止或删除 内容自动屏蔽
回复
支持
反对
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
干货茶馆
Archiver
|
手机版
|
小黑屋
|
MJJ论坛
Copyright
MJJ论坛
© 2022 All Rights Reserved.
快速回复
返回顶部
返回列表