使用批处理命令制作_切换壁纸 适用于PE环境

@echo off
if /i "%UserName%" == "SYSTEM" (Goto GotAdmin) else (reg query "HKLM\SYSTEM\ControlSet001\Control\MiniNT" 1>nul 2>nul&&Goto GotAdmin)
:BatchGotAdmin
Set _Args=%*
if `%1` neq `` Set "_Args=%_Args:"=""%"
if exist %WinDir%\System32\fltMC.exe fltMC 1>nul 2>nul||mshta VBScript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c """"%~f0"" %_Args%""",,"runas",1)(Window.Close) 2>nul&&Exit /b

:GotAdmin
Pushd "%CD%"&cd /d "%~dp0"
Title 切换壁纸&(if exist %WinDir%\System32\ureg.dll Mode 40,10 2>nul)&Color 2f

:Start
for /f "tokens=2*" %%i in ('reg query "HKCU\Control Panel\Desktop" /v "WallPaper" 2^>nul') do Set "OWP=%%~j"
Set Count=0&for /f "tokens=* usebackq" %%f in (`dir /a-d-s-h /b *.*^|find /v /c "%~nx0"`) do Set /a Count=%%f
echo 壁纸数量: [%Count%]
if %Count% == 0 Color cf&ping 127.1 -n 3 >nul&Exit /b

REM 调用参数:-Next(默认) -Random +Next +Random
Set CP=-&Set GP=顺序切换&Set "Args=%~1"
if defined Args (
    Set "CP=%Args:~0,1%"
    if /i "%Args:~1%" == "Random" Set GP=随机切换
)
Goto %GP%

:顺序切换
for /f "tokens=* usebackq" %%f in (`dir /a-d-s-h /b /o:d *.*^|find /v "%~nx0"`) do (
    Copy "%%~f"+,, "%%~f" 1>nul 2>nul&Set "NWP=%%~f"&Goto 设置壁纸
)
Exit /b

:随机切换
Set /a RNum=%Random%%%%Count%+1 2>nul
Set Num=1
Setlocal EnableDelayedExpansion
for /f "tokens=* usebackq" %%f in (`dir /a-d-s-h /b *.*^|find /v "%~nx0"`) do (
    if !Num! == %RNum% (Endlocal&Set RNum=[%RNum%] &Set "NWP=%%~f"&Goto 设置壁纸)
    Set /a Num+=1
)
Endlocal&Exit /b

:设置壁纸
if /i "%CP%" == "+" (Copy /y "%NWP%" "%WinDir%\Web\Wallpaper\%NWP%" >nul&&Set "NWP=%WinDir%\Web\Wallpaper\%NWP%") else Set "NWP=%~dp0%NWP%"
if "%GP%" == "随机切换" if /i "%OWP%" == "%NWP%" if %Count% gtr 1 Goto 随机切换
echo %GP%: %RNum%↓
echo %NWP%
Pecmd.exe /? 1>nul 2>nul&&(Pecmd.exe WALL "%NWP%"&&reg delete "HKCU\Control Panel\Desktop" /f /v "Wallpaper.PECMD" 1>nul 2>nul)||(reg add "HKCU\Control Panel\Desktop" /f /v "WallPaper" /t REG_SZ /d "%NWP%" 1>nul 2>nul&&Call :刷新)
if not defined Args ping 127.1 -n 2 >nul
Exit /b

:刷新 :: 可能不生效,需要手动重启资源管理器。
Set n=20
:循环
Set /a n-=1
@start "" rundll32.exe user32.dll,UpdatePerUserSystemParameters 1,True
if "%n%" neq "0" Goto 循环
Goto :eof