You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Windows脚本提取Spotlight图片并删除宽度不足的图片?

Windows Spotlight图片提取与筛选完整解决方案

需求说明

需要将Windows Spotlight的壁纸图片从系统隐藏目录提取到普通可访问文件夹,同时过滤掉宽度小于1920像素的文件(包括系统图标、竖屏Spotlight图片)。

初始实现与局限

最初使用批处理脚本完成基础提取:

  • 可将Spotlight目录下的所有文件复制到新建文件夹
  • 批量将文件重命名为.jpg格式
  • 缺陷:无法区分有效壁纸与图标、竖屏图,提取结果冗余。

常见问题踩坑

尝试使用批处理+PowerShell混合代码时,出现「命令语法不正确」的模糊错误,且逻辑缺陷导致误删所有图片——这类混合脚本往往存在语法兼容性问题,且未正确处理图片分辨率判断逻辑。

最终PowerShell解决方案

以下是经过验证的完整PowerShell脚本,可实现精准提取与筛选:

# 定义Spotlight源目录与目标保存目录
$sourcePath = "$env:LOCALAPPDATA\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets"
$targetPath = "$env:USERPROFILE\Pictures\Spotlight Wallpapers"

# 创建目标目录(若不存在)
if (-not (Test-Path -Path $targetPath)) {
    New-Item -ItemType Directory -Path $targetPath | Out-Null
}

# 复制源文件到目标目录并添加.jpg扩展名
Get-ChildItem -Path $sourcePath | ForEach-Object {
    $newFileName = Join-Path -Path $targetPath -ChildPath "$($_.Name).jpg"
    Copy-Item -Path $_.FullName -Destination $newFileName -Force
}

# 筛选并删除宽度小于1920像素的图片
Add-Type -AssemblyName System.Drawing
Get-ChildItem -Path $targetPath -Filter *.jpg | ForEach-Object {
    try {
        $image = [System.Drawing.Image]::FromFile($_.FullName)
        if ($image.Width -lt 1920) {
            Remove-Item -Path $_.FullName -Force
        }
        $image.Dispose()
    }
    catch {
        # 处理无法读取的无效图片文件
        Remove-Item -Path $_.FullName -Force
    }
}

Write-Host "Spotlight图片提取与筛选完成,结果保存至:$targetPath"

脚本说明

  1. 路径定义:使用系统环境变量定位Spotlight的隐藏源目录和用户图片目录,确保跨设备兼容性
  2. 文件复制与重命名:将无扩展名的源文件复制到目标目录并添加.jpg后缀,还原可识别的图片格式
  3. 分辨率筛选:通过System.Drawing类读取图片宽度,精准删除宽度不足1920的非横屏壁纸文件
  4. 异常处理:自动清理无法识别的无效图片文件,避免残留垃圾文件

内容的提问来源于stack exchange,提问作者AL2044

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:58:30