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

时间:2012-06-09 10:19:21

标签: batch-file imagemagick batch-processing photos

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

convert %* %1.jpg

效果很好。我也可以拖动一个文件夹,它会转换里面的图像,但重命名为文件夹的名称,一个目录更高,如下所示:

@set SOURCE=%1
convert %SOURCE%\* %SOURCE%.jpg

我想我需要一个for循环来执行文件夹中每个文件的转换。但我遇到了问题。我不确定在哪里放置引号,使用什么变量,以及如何克服空格。我想象这样的事情......

for %%f in (%SOURCE%\*) do ( convert %%f "%SOURCE%\%%f.jpg" )
但是,是的,我不知所措。我正在尝试这个小项目,既要学习,也要帮助我的父亲快速转换大量的照片。

2 个答案:

答案 0 :(得分:3)

听起来像ImageMagick可以使用多个输入参数和一个输出参数,但是为了简化它一次只能使用一个文件,请尝试以下操作。你的循环看起来正确,但下面的〜更改将处理引号。

您可能还希望将%% a *匹配更改为特定文件,这样您就不会捕获现有的jpgs或非图像文件,例如for %% f in(%% a * .png %% a * .gif)do ...

最后,在两条转换线前添加一个“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

答案 1 :(得分:0)

不完全是你想要的;这将在原始目录中创建一个新目录,以将修改后的照片保存到:

:: Create the new directory 
md %1\resized 

:: Resize and save the new version
for %%f in (%1\*.jpg) do ( convert "%%f" -thumbnail 800x800 "%1\resized\%%~nf.jpg" )