找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 352|回复: 15

[分享] 分享一个加入系统变量的脚本

[复制链接]
发表于 前天 15:22 | 显示全部楼层 |阅读模式
这是一个自己摸索成功了的加入系统变量脚本,适用PE,PC双环境。纯doc的兼容性好。
脚本原理就不多说了可以问AI,主要这是实践过稳定成功的案例,所以分享分享,不懂有没有更简的写法。
我以之前做的【网络电视】为例,因为要实现对ffplay的全局变量调用,ffplay.exe放在一个一层文件夹里,
文件夹名:optional_tools 注意为什么要特别提示这个呢?

这也是这个脚本的主要功能体现之一,就是会针对这个文件夹名为变量路径的做清理。也就是说,这个脚本,
永远只会在变量路径里写当前使用的路径,其它的之前创建的都会清理掉,不会在变量里留下一大堆的旧变量路径。

脚本在正常系统运行后直接生效不需要注销一类的,在PE会重启资源管理器,(有些PE不能守护资源管理器的可能
就见不到桌面了)

脚本在同路径下,第二次以后运行是不会动作的,体现出有点判断能力的。
我把全部代码粘贴出来,包括在桌面创建快捷方式,以【网络电视】为例的。
希望有需要的人看到。

原版:移动文件夹后可再绿化.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "TOOL_PATH=%~dp0optional_tools"
  4. set "TMPFILE=%temp%\_path.tmp"

  5. for /f "skip=2 tokens=2,*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path 2^>nul') do set "SYSPATH=%%b"
  6. echo;%SYSPATH% | find /i "%TOOL_PATH%" >nul && (
  7.     goto EndShortcut
  8. )
  9. if /i "%systemdrive%"=="X:" (
  10.     goto PE
  11. ) else (
  12.     setx /m Path "%SYSPATH%;%TOOL_PATH%" >nul
  13. )
  14. :PE
  15. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d "%SYSPATH%;%TOOL_PATH%" /f >nul

  16. if /i "%systemdrive%"=="X:" PECMD.EXE KILL EXPLORER.EXE

  17. reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path >"%TMPFILE%"
  18. for /f "usebackq skip=2 tokens=2,*" %%a in ("%TMPFILE%") do set "RAW=%%b"
  19. del "%TMPFILE%" >nul 2>&1

  20. set "OUT="
  21. for %%i in ("%RAW:;=";"%") do (
  22.     set "ITEM=%%~i"
  23.     set "SKIP=0"
  24.     echo !ITEM!|findstr /r "^[A-Za-z]:" >nul
  25.     if !errorlevel! equ 0 (
  26.         echo !ITEM!|findstr /i /e "\\optional_tools" >nul
  27.         if !errorlevel! equ 0 set "SKIP=1"
  28.     )
  29.     if !SKIP! equ 0 (
  30.         if defined OUT set "OUT=!OUT!;"
  31.         set "OUT=!OUT!!ITEM!"
  32.     )
  33. )

  34. :: 清理后写回注册表
  35. set "FINAL_PATH=!OUT!;%TOOL_PATH%"
  36. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d "!FINAL_PATH!" /f >nul

  37. if /i "%systemdrive%"=="X:" PECMD.EXE KILL EXPLORER.EXE

  38. :EndShortcut
  39. pushd "%~dp0"
  40. for /f "skip=2 tokens=3" %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do set DESKTOP_PATH=%%a
  41. call set DESKTOP_PATH=%DESKTOP_PATH%
  42. set "ROOT=%~dp0"
  43. set "ICO1=%ROOT%ffmpegplay.ico"

  44. echo Set WshShell = CreateObject("WScript.Shell") >"%temp%\mklnk.vbs"
  45. echo Set lnk = WshShell.CreateShortcut("%DESKTOP_PATH%\网络电视PlayMenu.lnk") >>"%temp%\mklnk.vbs"

  46. echo lnk.TargetPath = """%ROOT%pecmd.exe""" >>"%temp%\mklnk.vbs"

  47. echo lnk.Arguments = """%ROOT%PlayMenu.wcs""" >>"%temp%\mklnk.vbs"
  48. echo lnk.WorkingDirectory = "%ROOT%" >>"%temp%\mklnk.vbs"
  49. echo lnk.IconLocation = "%ICO1%" >>"%temp%\mklnk.vbs"
  50. echo lnk.Description = "使用FFmpeg播放pecmd窗口菜单工具" >>"%temp%\mklnk.vbs"
  51. echo lnk.Save >>"%temp%\mklnk.vbs"

  52. cscript //nologo "%temp%\mklnk.vbs"
  53. del "%temp%\mklnk.vbs" >nul 2>&1
  54. popd
  55. endlocal
  56. exit
复制代码




发表于 前天 15:38 | 显示全部楼层
这款脚本很实用啊,多谢楼主了
回复

使用道具 举报

发表于 前天 15:51 | 显示全部楼层
我经常一条命令搞定:SET PATH=%PATH%;F:\EServer-data\bin
回复

使用道具 举报

发表于 前天 16:00 | 显示全部楼层
你还是挺牛的
回复

使用道具 举报

发表于 前天 16:05 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

发表于 前天 17:14 | 显示全部楼层
好工具,支持
回复

使用道具 举报

发表于 前天 17:18 | 显示全部楼层
试试脚本,谢谢!
回复

使用道具 举报

发表于 前天 17:36 | 显示全部楼层
回复

使用道具 举报

发表于 前天 18:21 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 前天 19:25 | 显示全部楼层
学习学习
回复

使用道具 举报

发表于 前天 21:13 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 前天 21:53 | 显示全部楼层
回复

使用道具 举报

发表于 昨天 05:56 | 显示全部楼层
这个软件牛叉 谢谢了
回复

使用道具 举报

发表于 昨天 07:03 | 显示全部楼层
回复

使用道具 举报

发表于 昨天 12:39 | 显示全部楼层
新系统直接用自带的 setx.exe 命令就好了。
回复

使用道具 举报

发表于 昨天 17:23 | 显示全部楼层
    一楼的脚本是要清理系统变量 path 包含的那些有 'optional_tools' 关键词的残留路径,还要创建当前桌面相应的快捷方式。
    对于 PE 系统,仅采用 reg add 方法针对当前注册表的修改一般会因 PE 重启而消失(除非一直运行不关机),因此从注册表取出的系统变量 path 会被自动复原为系统初始值,但对于完整系统,确有此清理残留项的必要,因为采用 setx /m 方法生成或修改的 path 变量值会留存在注册表中。
    以下代码是根据一楼相应片段改写,无须反复调用 findstr 清理系统变量 path 中残留路径,当 path 内含路径较多时效率会高一些...

test.bat
  1. @echo off &setlocal enabledelayedexpansion &set "p="
  2. for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v path') do set "_p=%%b"
  3. for %%D in ("!_p:;=";"!") do (
  4.         set "y=1" &set "d=%%~D" &if "!d:~-1!"=="\" set "d=!d:~,-1!"
  5.         for %%d in ("!d!") do if /i "%%~nxd"=="@BAT_functions" if /i "%%~d\" neq "%~dp0" set "y="
  6.         if defined y set "p=!p!!d!;"  )
  7. reg add "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v path /t reg_expand_sz /d "!p:~,-1!" /f >nul
  8. exit/b
复制代码







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-8-24 07:28

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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