batch-file - 批处理脚本拖放文件夹使用 ImageMagick 转换图像

标签 batch-file imagemagick batch-processing photos

首先,我尝试到处寻找,但没有成功。我没有经验,非常感谢任何帮助。我正在尝试编写一个脚本将文件夹拖到批处理文件中,然后使用 ImageMagick 将该文件夹中的所有图像转换为 jpg。我可以看到很可能在命令行上执行脚本,一切正常。但是拖动文件夹给我带来了问题。我可以将许多文件拖到脚本上并且它转换得很好:

convert %* %1.jpg

效果很好。我也可以拖动一个文件夹,它会转换里面的图像,但是重命名为文件夹的名称,上一级目录,如下所示:
@set SOURCE=%1
convert %SOURCE%\* %SOURCE%.jpg

我想我需要一个 for 循环对文件夹中的每个文件执行转换。但我遇到了问题。我不确定在哪里加上引号,使用什么变量,以及如何克服空格。我想象这样的事情......
for %%f in (%SOURCE%\*) do ( convert %%f "%SOURCE%\%%f.jpg" )

但是,是的,我不知所措。我正在尝试这个小项目,既是为了学习,也是为了帮助我父亲快速转换大量照片。

最佳答案

听起来 ImageMagick 可以接受多个输入参数和一个输出参数,但要一次使用一个文件来简化它,请尝试以下操作。您的循环看起来不错,但下面的 ~ 更改将处理引号。

您可能还想将 %%a* 匹配更改为特定文件,这样您就不会捕获现有的 jpg 或非图像文件,例如对于 (%%a*.png %%a*.gif) 中的 %%f 做...

最后,在两个转换行前添加一个“echo”,以便您可以进行测试运行。

@echo off

rem Loops through arguments. If a file converts it to a jpg.  If a directory
rem converts files in that directory to jpgs.  Assumes a program "convert".

set count=0
for %%a in (%*) do (
  if exist %%a (
    if exist %%a\ (
      rem Directory, loop through contents
      for %%f in (%%a\*) do (
        convert "%%f" "%%~a\%%~nf.jpg"
        set /a count+=1
      )
    ) else (
      rem File, just convert
      convert "%%~a" "%%~na.jpg"
      set /a count+=1
    )    
  ) else (
    echo Skipping non-existent %%~a
  )
)

echo Converted %count% files

pause

关于batch-file - 批处理脚本拖放文件夹使用 ImageMagick 转换图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10960165/

相关文章:

visual-studio - 有没有办法从 msbuild 获取属性的值?

linux - ImageMagick,反转我的命令

python - 从图像中删除所有空白区域

imagemagick - Magickwand 转换为 TIFF&CCITT 组 4 压缩给出未压缩的图像

MATLAB:批量导入一个非常大的文件

node.js - 批量启动后退出node.js cmd

batch-file - 使用 BAT 文件在连接失败时自动重新连接 VPN Cisco

java - 如何从正在运行的 webapp 重启 tomcat?

batch-file - 解释 Windows 批处理换行变量 hack 的工作原理

batch-file - 批处理 - 如果在日志文件中找到内容,则将其写入另一个日志文件,否则不执行任何操作