首先,我试着到处寻找,并且没有成功。我缺乏经验,并且感谢任何帮助。我正在尝试编写一个脚本来将文件夹拖到批处理文件上,然后使用ImageMagick将该文件夹中的所有图像转换为jpgs。我可以看到在命令行上执行脚本非常有可能,一切正常。但拖动文件夹给了我一些问题。我可以将许多文件拖到脚本上,它转换得很好:
convert %* %1.jpg
效果很好。我也可以拖动一个文件夹,它会转换里面的图像,但重命名为文件夹的名称,一个目录更高,如下所示:
@set SOURCE=%1
convert %SOURCE%\* %SOURCE%.jpg
我想我需要一个for循环来执行文件夹中每个文件的转换。但我遇到了问题。我不确定在哪里放置引号,使用什么变量,以及如何克服空格。我想象这样的事情......
for %%f in (%SOURCE%\*) do ( convert %%f "%SOURCE%\%%f.jpg" )
但是,是的,我不知所措。我正在尝试这个小项目,既要学习,也要帮助我的父亲快速转换大量的照片。
答案 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" )