批处理脚本,仅对超过特定大小的文件执行命令



我正在尝试仅在超过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个字节的文件。在这些情况下,谨慎的做法可能是多次运行脚本。

相关内容

  • 没有找到相关文章

最新更新