宇宙主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

欧基零壹微头条IP归属甄别会员请立即修改密码
查看: 944|回复: 2

[Windows VPS] 辛辛苦苦写了批处理,还是不能刷新到系统

[复制链接]
发表于 2021-12-6 10:21:45 | 显示全部楼层 |阅读模式
本意是为了快速设置java环境,wmic还是不能刷新系统,看样子只能使用
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, LPARAM(PChar('Environment')), SMTO_NORMAL, 4000, ret)
非要编译喽

大神有啥办法,通过脚本刷新?


  1. [url=home.php?mod=space&uid=20206]@echo[/url] off
  2. REM dyydyyBatchFile
  3. REM 获得当前文件的目录
  4. setlocal enabledelayedexpansion
  5. cls
  6. echo =------------------------=
  7. set CDIR=%~dp0
  8. set CDIR="C:\jdk1.8"
  9. goto :MAIN
  10. :: 函数定义


  11. :getWmicVar
  12.     :: %1=name,%2=username
  13.     set xname=%1
  14.     set xname=!xname:"=!
  15.     echo %2 | findstr "system" >nul && (
  16.         set uname=^<system^>
  17.         ) || (
  18.             set uname=%2
  19.             set uname=!uname:"=!
  20.         )

  21.     set cmd=wmic ENVIRONMENT where "name='%xname%' and username='%uname%'" get VariableValue
  22.     set ret=
  23.     ::下面的执行结果有多行,就会执行多次 %%a会轮换
  24.     set/a i=0
  25.     for /f "delims=" %%a in ('%cmd%') do (
  26.         ::跳过第行标头 第1行
  27.         if !i! equ 1 (
  28.             set ret=%%a
  29.         )      
  30.         set /a i=i+1
  31.     )
  32.     :: 返回的变量有尾随空格,处理掉
  33.     :: 最后一个可能是回车,删除一个char,果然
  34.     set ret=!ret:~0,-1!
  35.     :innerLoop
  36.     if "!ret:~-1!"==" " (
  37.         set ret=!ret:~0,-1!
  38.         goto :innerLoop
  39.     )
  40. goto :EOF

  41. :setWmicVar
  42.     :: %1=name,%2=value,%3=username 第二个参数为空时仅删除这个环境变量
  43.     set xname=%1
  44.     set xname=!xname:"=!
  45.     set xvalue=%2
  46.     set xvalue=!xvalue:"=!
  47.     echo %3 | findstr "system" >nul && (
  48.         set uname=^<system^>
  49.         ) || (
  50.             set uname=%3
  51.             set uname=!uname:"=!
  52.         )
  53.     wmic ENVIRONMENT where "name='%xname%' and username='%uname%'" delete
  54.     if not "%xvalue%"=="" (
  55.         wmic ENVIRONMENT create name="%xname%" , username="%uname%" , VariableValue="%xvalue%"
  56.     )   
  57.     set ret=%errorlevel%
  58. goto :EOF

  59. [url=home.php?mod=space&uid=55828]@rem[/url] ------------------------下面是主入口---------------------------------

  60. :MAIN

  61. set tousr=
  62. set cusr=
  63. set /p tousr="绿化安装到当前用户还是整个系统(默认为安装到当用用户环境):"
  64. if "%tousr%"=="" (
  65.     for /f %%a in ('whoami') do set cusr=%%a
  66.     set cusr=!cusr:\=\\!
  67. ) else (
  68.     :: <system>作为参数传不过去,因为有特殊字符<>
  69.     set cusr="system"
  70. )

  71. :: 读取指定用户的path环境变量
  72. call :getWmicVar "path" "%cusr%"
  73. set pth=%ret%
  74. if "%pth%"=="" goto :EOF

  75. set newPath=
  76. :loop1
  77. for /f "tokens=1,* delims=;" %%a in ("%pth%") do (
  78.     set apth=%%a
  79.     set pth=%%b
  80. )
  81. @REM 卸载 ,并清除了无效路径
  82. if not "%apth:~0,11%"=="%%JAVA_HOME%%" if exist %apth%  (
  83.        set newPath=%newPath%%apth%;
  84.     )
  85. if defined pth goto :loop1

  86. call :getWmicVar "JAVA_HOME" "%cusr%"
  87. set javahomefind=%ret%

  88. if "%javahomefind%" == "" (
  89.     :: 安装
  90.     call :setWmicVar "JAVA_HOME" "%CDIR%" "%cusr%"
  91.     :: 下面的 %%JAVA_HOME%% 经过传递给子过程,被脱掉了一层%,所以还需要再加一层
  92.     call :setWmicVar "CLASSPATH" ".;%%%%JAVA_HOME%%%%\lib\dt.jar;%%%%JAVA_HOME%%%%\lib\tools.jar;" "%cusr%"
  93.     call :setWmicVar "path" "%newPath%;%%%%JAVA_HOME%%%%\bin;%%%%JAVA_HOME%%%%\jre\bin" "%cusr%"
  94.     echo "JAVA环境 设置完毕"
  95. ) else (
  96.     :: 卸载
  97.     call :setWmicVar "JAVA_HOME" "" "%cusr%"
  98.     call :setWmicVar "CLASSPATH" "" "%cusr%"
  99.     call :setWmicVar "path" "%newPath%" "%cusr%"
  100.     echo "JAVA_HOME 卸载完毕"
  101. )
  102. pause
复制代码
发表于 2021-12-6 10:29:29 | 显示全部楼层
本帖最后由 sRGB 于 2021-12-6 10:30 编辑

java 语法太啰嗦,看java代码就想睡觉

把 JRE 部署到Docker 容器中,使用 Docker 管理停止启动会简单点吧
发表于 2021-12-6 10:31:29 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|FastFib VPS论坛

GMT+8, 2024-9-20 14:47 , Processed in 0.061267 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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