|
|
这是一个自己摸索成功了的加入系统变量脚本,适用PE,PC双环境。纯doc的兼容性好。
脚本原理就不多说了可以问AI,主要这是实践过稳定成功的案例,所以分享分享,不懂有没有更简的写法。
我以之前做的【网络电视】为例,因为要实现对ffplay的全局变量调用,ffplay.exe放在一个一层文件夹里,
文件夹名:optional_tools 注意为什么要特别提示这个呢?
这也是这个脚本的主要功能体现之一,就是会针对这个文件夹名为变量路径的做清理。也就是说,这个脚本,
永远只会在变量路径里写当前使用的路径,其它的之前创建的都会清理掉,不会在变量里留下一大堆的旧变量路径。
脚本在正常系统运行后直接生效不需要注销一类的,在PE会重启资源管理器,(有些PE不能守护资源管理器的可能
就见不到桌面了)
脚本在同路径下,第二次以后运行是不会动作的,体现出有点判断能力的。
我把全部代码粘贴出来,包括在桌面创建快捷方式,以【网络电视】为例的。
希望有需要的人看到。
原版:移动文件夹后可再绿化.bat
- @echo off
- setlocal enabledelayedexpansion
- set "TOOL_PATH=%~dp0optional_tools"
- set "TMPFILE=%temp%\_path.tmp"
- 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"
- echo;%SYSPATH% | find /i "%TOOL_PATH%" >nul && (
- goto EndShortcut
- )
- if /i "%systemdrive%"=="X:" (
- goto PE
- ) else (
- setx /m Path "%SYSPATH%;%TOOL_PATH%" >nul
- )
- :PE
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d "%SYSPATH%;%TOOL_PATH%" /f >nul
- if /i "%systemdrive%"=="X:" PECMD.EXE KILL EXPLORER.EXE
- reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path >"%TMPFILE%"
- for /f "usebackq skip=2 tokens=2,*" %%a in ("%TMPFILE%") do set "RAW=%%b"
- del "%TMPFILE%" >nul 2>&1
- set "OUT="
- for %%i in ("%RAW:;=";"%") do (
- set "ITEM=%%~i"
- set "SKIP=0"
- echo !ITEM!|findstr /r "^[A-Za-z]:" >nul
- if !errorlevel! equ 0 (
- echo !ITEM!|findstr /i /e "\\optional_tools" >nul
- if !errorlevel! equ 0 set "SKIP=1"
- )
- if !SKIP! equ 0 (
- if defined OUT set "OUT=!OUT!;"
- set "OUT=!OUT!!ITEM!"
- )
- )
- :: 清理后写回注册表
- set "FINAL_PATH=!OUT!;%TOOL_PATH%"
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d "!FINAL_PATH!" /f >nul
- if /i "%systemdrive%"=="X:" PECMD.EXE KILL EXPLORER.EXE
- :EndShortcut
- pushd "%~dp0"
- 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
- call set DESKTOP_PATH=%DESKTOP_PATH%
- set "ROOT=%~dp0"
- set "ICO1=%ROOT%ffmpegplay.ico"
- echo Set WshShell = CreateObject("WScript.Shell") >"%temp%\mklnk.vbs"
- echo Set lnk = WshShell.CreateShortcut("%DESKTOP_PATH%\网络电视PlayMenu.lnk") >>"%temp%\mklnk.vbs"
- echo lnk.TargetPath = """%ROOT%pecmd.exe""" >>"%temp%\mklnk.vbs"
- echo lnk.Arguments = """%ROOT%PlayMenu.wcs""" >>"%temp%\mklnk.vbs"
- echo lnk.WorkingDirectory = "%ROOT%" >>"%temp%\mklnk.vbs"
- echo lnk.IconLocation = "%ICO1%" >>"%temp%\mklnk.vbs"
- echo lnk.Description = "使用FFmpeg播放pecmd窗口菜单工具" >>"%temp%\mklnk.vbs"
- echo lnk.Save >>"%temp%\mklnk.vbs"
- cscript //nologo "%temp%\mklnk.vbs"
- del "%temp%\mklnk.vbs" >nul 2>&1
- popd
- endlocal
- exit
复制代码
|
|