可根据时间自动切换壁纸,也可以只切换一次,壁纸来源来自bing
@echo off
title 壁纸
set "WALL_DIR=%APPDATA%\Wall"
if not exist "%WALL_DIR%" mkdir "%WALL_DIR%"
echo ============================================
echo 自动壁纸
echo ============================================
echo.
echo 请设置自动切换间隔(单位:分钟)
echo 0 = 仅切换一次,不自动循环
echo 1 = 每1分钟切换一次
echo N = 每N分钟切换一次
echo.
set /p "TIME_INTERVAL=请输入间隔时间: "
if "%TIME_INTERVAL%"=="" set "TIME_INTERVAL=0"
REM 初始化计数器和开始时间
set "RUN_COUNT=0"
set "START_TIME=%TIME%"
echo.
echo [设置] 目录: %WALL_DIR%
if "%TIME_INTERVAL%"=="0" (
echo [设置] 模式: 单次切换
) else (
echo [设置] 模式: 每 %TIME_INTERVAL% 分钟自动切换
)
echo ============================================
:FETCH
REM 增加运行次数
set /a "RUN_COUNT+=1"
echo.
echo ----------------------------------------
echo [运行信息] 第 %RUN_COUNT% 次切换壁纸
call :CALC_RUNTIME
echo ----------------------------------------
echo.
powershell -ExecutionPolicy Bypass -NoProfile -Command ^
"$url = 'https://api.aiys.net/api/bing4K/?type=1'; ^
try { ^
Write-Host '[1/3] 正在获取 JSON 数据...' -ForegroundColor Yellow; ^
$res = Invoke-RestMethod -Uri $url -TimeoutSec 10; ^
if ($res.code -eq 200) { ^
$imgUrl = $res.data.url; ^
$savePath = Join-Path $env:APPDATA 'LumoWall\bing_wallpaper.jpg'; ^
Write-Host '[2/3] 下载图片: ' $imgUrl -ForegroundColor Cyan; ^
$wc = New-Object System.Net.WebClient; ^
$wc.DownloadFile($imgUrl, $savePath); ^
Write-Host ' 下载完成: ' $savePath -ForegroundColor Green; ^
Write-Host '[3/3] 设置壁纸...' -ForegroundColor Yellow; ^
Set-ItemProperty -Path 'HKCU:\Control Panel\Desktop' -Name 'WallPaper' -Value $savePath -Force; ^
Add-Type -TypeDefinition 'using System; using System.Runtime.InteropServices; public class WallpaperChanger { [DllImport(\"user32.dll\", CharSet = CharSet.Auto, SetLastError = true)] public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni); }'; ^
$result = [WallpaperChanger]::SystemParametersInfo(0x0014, 0, $savePath, 0x0003); ^
if ($result -ne 0) { ^
Write-Host ' √ 壁纸已刷新成功!' -ForegroundColor Green; ^
} else { ^
Write-Host ' ? 刷新可能需要手动刷新桌面' -ForegroundColor Magenta; ^
} ^
} else { ^
Write-Host 'API 返回错误代码: ' $res.code -ForegroundColor Red; ^
} ^
} catch { ^
Write-Host '发生严重错误: ' $_.Exception.Message -ForegroundColor DarkRed; ^
}"
if "%TIME_INTERVAL%"=="0" goto END
echo.
echo [等待] %TIME_INTERVAL% 分钟后自动切换下一张...
echo 按 Ctrl+C 可停止自动切换
set /a "WAIT_SEC=%TIME_INTERVAL% * 60"
timeout /t %WAIT_SEC% /nobreak >nul
goto FETCH
:CALC_RUNTIME
REM 计算运行时间
set "CURRENT_TIME=%TIME%"
REM 转换为秒数
call :TIME_TO_SECONDS "%START_TIME%" START_SEC
call :TIME_TO_SECONDS "%CURRENT_TIME%" CURRENT_SEC
REM 计算差值
set /a "ELAPSED_SEC=CURRENT_SEC-START_SEC"
REM 处理跨午夜情况
if %ELAPSED_SEC% LSS 0 set /a "ELAPSED_SEC+=86400"
REM 转换为时分秒
set /a "HOURS=ELAPSED_SEC/3600"
set /a "MINUTES=(ELAPSED_SEC%%3600)/60"
set /a "SECONDS=ELAPSED_SEC%%60"
echo [运行时间] %HOURS% 小时 %MINUTES% 分钟 %SECONDS% 秒
goto :EOF
:TIME_TO_SECONDS
REM 将时间转换为秒数
set "TIME_STR=%~1"
REM 去除前导空格和处理时间格式
for /f "tokens=1-3 delims=:., " %%a in ("%TIME_STR%") do (
set /a "H=%%a"
set /a "M=%%b"
set /a "S=%%c"
)
REM 计算总秒数
set /a "%~2=H*3600+M*60+S"
goto :EOF
:END
echo.
echo ============================================
echo 任务结束!
echo 总共运行 %RUN_COUNT% 次
call :CALC_RUNTIME
echo 如果壁纸未立即变化,请按 F5 刷新桌面或按 Win+D 两次
echo ============================================
pause