我正在尝试仅在超过1,500kb的文件上运行Imagemagick mogrify。 Imagemagick 命令将magick mogrify *.jpg -resize 50%% *.jpg
所以在我自己研究之后,我最终得到了这个
@echo off
setlocal
set maxbytesize=1500000
FOR /F %%A IN (*.jpg) DO set size=%%~zA
if %size% GTR %maxbytesize% (
magick mogrify *.jpg -resize 50%% *.jpg
)
这是行不通的,我不知道从这里开始。 我已经阅读了 https://unix.stackexchange.com/questions/38943/use-mogrify-to-resize-large-files-while-ignoring-small-ones,尽管我不知道如何实现它,但我可能必须先过滤列表。 任何帮助,不胜感激。感谢您阅读这篇文章。
您的值将在文件的每次迭代中被替换(除了/F
在这里也会导致另一个问题之外,请参阅for /?
以获取更多详细信息)
因此,仅将最后一个文件的值设置为值。此外,即使它们不是,您也在*.jpg
上执行magick
,这是目录中的所有jpg
文件。因此,如果最后一个文件看起来与大小匹配,则所有文件都将调整大小,这将有点违背目的,对吧?
您真正需要的是遍历文件,每次都匹配大小,然后执行以下操作:
@echo off
for %%A IN (*.jpg) DO if %%~zA gtr 1500000 magick mogrify "%%~A" -resize 50%% "%%~A"
只是为了与众不同,下面是一个示例,它在for
循环的do
部分之前预先过滤目标文件,而不是传递所有内容,然后过滤它们的大小。
此外,我还修改了mogrify
参数,因为如果我没记错的话,调整大小会自动覆盖源文件。
请记住在运行脚本之前,在第4
行和第5
行上输入您的实际源路径和魔法路径。
@Echo Off
SetLocal EnableExtensons
Set "SourcePath=S:ourceDirectory"
Set "MagickPath=%ProgramFiles%ImageMagick-7.1.0-Q16-HDRI"
If Not Exist "%MagickPath%magick.exe" GoTo :EOF
CD /D "%SourcePath%" 2>NUL || GoTo :EOF
Set "}=%CD:=\%\"
For /F Tokens^=6^ Delims^=^" %%G In ('
%SystemRoot%System32wbemWMIC.exe DataFile Where
"Drive='%}:~,2%' And Path='%}:~2%' And Extension='jpg' And FileSize>'1500000'"
Get Name /Format:MOF 2^>NUL'
) Do "%MagickPath%magick.exe" mogrify -resize 50%% "%%~nxG"
作为旁注,请注意,如果您的.jpg
文件非常大,即使在调整大小后50%
,可能仍然有超过1500000
个字节的文件。在这些情况下,谨慎的做法可能是多次运行脚本。