有没有办法通过Windows Batch删除文件夹中小于一定宽度的所有图像?

问题描述 投票:0回答:1

我想编写一个简单的程序,将 Windows 聚光灯图像从它们所在的系统目录中提取到一个我可以更轻松地获取它们的文件夹中。到目前为止我有这个:

@ECHO OFF
if not exist "%homedrive%%homepath%\Downloads\Spotlight" mkdir %homedrive%%homepath%\Downloads\Spotlight
xcopy /s %homedrive%%homepath%\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets\ %homedrive%%homepath%\Downloads\Spotlight
ren %homedrive%%homepath%\Downloads\Spotlight\* *.jpg

成功将聚光灯目录的内容复制到一个新文件夹中,然后将所有文件重命名为 JPG。然而,也出现了许多杂项图标,以及“肖像模式”聚光灯图像。我想通过检查输出文件夹中的每个 .jpg 以查看其宽度是否小于 1920 像素来删除它们,如果小于则删除图像。

我去找AI尝试解决我的问题,但失败了:

set "SpotlightFolder=%USERPROFILE%\Downloads\Spotlight"
:: Iterate over all .jpg files and delete those with width smaller than 1920 pixels
for %%F in ("%SpotlightFolder%\*.jpg") do (
    for /f %%W in ('powershell -command "& {(Get-ImageDimensions '%%~F').Width}"') do set "Width=%%W"
    if !Width! lss 1920 (
        echo Deleting: %%~nxF
        del "%%F"
    ) else (
        echo Keeping: %%~nxF
    )
)

:: PowerShell script to get image dimensions
<#
function Get-ImageDimensions {
    param([string]$filePath)
    $image = [System.Drawing.Image]::FromFile($filePath)
    $width = $image.Width
    $image.Dispose()
    $width
}
#>

这会返回一个模糊的“命令语法不正确”错误,并删除文件夹中的所有图像,无论尺寸如何。 任何帮助将不胜感激。

windows powershell batch-file command-line
1个回答
1
投票

这是一个 .bat 文件脚本,它将删除宽度小于 1000 的 .jpeg 文件。 根据您的喜好编辑 PICDIR 和 MIN_WIDTH 值。

SET "PICDIR=%USERPROFILE%\Pictures"
SET "MIN_WIDTH=1000"
pwsh -NoLogo -NoProfile -Command ^
    "$PicDir = '"%PICDIR%"';" ^
    "Get-ChildItem -File -Path $PicDir -Filter '*.jpeg' |" ^
        "ForEach-Object {" ^
            "$Image = [System.Drawing.Image]::FromFile($_.FullName);" ^
            "if ($Image.Width -lt %MIN_WIDTH%) { $_ };" ^
            "$Image.Dispose();" ^
        "} |" ^
        "Remove-Item -WhatIf;"
© www.soinside.com 2019 - 2024. All rights reserved.