我想写一个简单的程序来提取的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
字符串
它成功地将spotlight目录中的内容复制到一个新文件夹中,然后重命名所有文件使其成为JPG。然而,也有一些杂项图标,以及“肖像模式”spotlight图像。我想通过检查输出文件夹中的每个.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
}
#>
型
这将返回一个模糊的“命令语法不正确”错误,并删除文件夹中的所有图像,无论尺寸如何。
2条答案
按热度按时间hof1towb1#
下面是一个.bat文件脚本,它将删除宽度小于1000的.jpeg文件。根据您的喜好编辑PICESTAL和MIN_WIDTH值。当您对删除正确的文件感到满意时,从
Remove-Item
命令中删除-WhatIf
。字符串
dphi5xsq2#
使用
System.Drawing.Image
可能不是很有效,因为它实际上解码和加载了整个图像。元数据可以直接使用ShellCOM object的Folder.GetDetailsOf()
method访问,所以获取图像的宽度非常便宜。下面是一个简单的PowerShell脚本来完成你想要的任务:字符串
基本上,这会列出指定路径中的所有 *.jpg文件,过滤
Width
小于$minWidth
的文件,将其传递给Remove-Item
。删除-WhatIf
选项以进行实际删除列号165是从here中提取的魔术,或基于this的176。您可以在What options are available for Shell32.Folder.GetDetailsOf(..,..)?中运行PowerShell脚本以查找系统上的实际值,以防它不同:
型
我已经在我的电脑上测试过了,它工作正常,图像宽度是预期的176字段。当然,你也可以自动化的方法来获得这个神奇的数字,但我在这里保持简单
有关元数据阅读的详细信息,请检查
因为它使用COM对象,所以可以从任何支持COM对象的语言调用它,例如JS、VBS或hybrid VBS/hybrid JS