ImageMagick的批处理命令,用于转换目录中的所有文件和Windows上的子目录

时间:2015-05-23 15:19:14

标签: windows batch-file svg imagemagick imagemagick-convert

我在文件夹和子文件夹中有数千个SVG。我想要的是将所有这些批量转换为 jpg png 图像。

有人可以帮我写一个ImageMagick(windows)的命令,它可以查找所有svg&jng到原始名称的jpg / png并将它们保存在同一个目录中吗?

以下是示例结构:

C:\SVG\BusinessMan.svg
C:\SVG\Models\Home.svg
C:\SVG\Underlines\underline.svg

转换后我想要这样:

C:\SVG\BusinessMan.svg
C:\SVG\BusinessMan.jpg
C:\SVG\Models\Home.svg
C:\SVG\Models\Home.jpg
C:\SVG\Underlines\underline.svg
C:\SVG\Underlines\underline.jpg

3 个答案:

答案 0 :(得分:20)

您不需要shell脚本,只需使用df['itime'] = df['itime'].apply(lambda x: x.zfill(4)) 命令

cd到图像目录

mogrify

答案 1 :(得分:8)

尝试在根文件夹中使用带有FOR标记的/R循环:

FOR /R %a IN (*.svg) DO convert "%~a" "%~dpna.jpg"

此命令将转换您从命令启动的根文件夹下的子目录中的所有.svg文件。

以上命令适用于命令行,如果您打算在批处理文件(.bat)中使用该命令,请记住使用%%而不是%

FOR /R %%a IN (*.svg) DO convert "%%~a" "%%~dpna.jpg"

有关详细信息,请参阅Imagemagick文档的this页面

答案 2 :(得分:0)

当我在许多子目录中有许多图像需要处理时,我使用各种在线资源创建了以下脚本来转换文件。该脚本还包括进度显示。它已经过ImageMagick 7的测试。希望您发现它有用。


#ImageMagick Recursive Powershell Script with Progress display
#This script will execute a command recursively on all folders and 
subfolders
#This script will display the filename of every file processed
#set the source folder for the images
$srcfolder = "C:\temp"
#set the destination folder for the images
$destfolder = "C:\temp"
#set the ImageMagick command
$im_convert_exe = "magick"
#set the source image format (wildcard must be specified)
$src_filter = "*.png"
#set the destination (output) image format
$dest_ext = "bmp"
#set the ImageMagick command options
$options = "-colorspace rgb -density 300 -depth 8 -alpha off"
#set the log file path and name
$logfile = "C:\temp\convert.log"
$fp = New-Item -ItemType file $logfile -force
#The following lines allow the display of all files that are being 
processed
$count=0
foreach ($srcitem in $(Get-ChildItem $srcfolder -include $src_filter - 
recurse))
{
$srcname = $srcitem.fullname
$partial = $srcitem.FullName.Substring( $srcfolder.Length )
$destname = $destfolder + $partial
$destname= [System.IO.Path]::ChangeExtension( $destname , $dest_ext )
$destpath = [System.IO.Path]::GetDirectoryName( $destname )

if (-not (test-path $destpath))
{
    New-Item $destpath -type directory | Out-Null
}
#the following line defines the contents of the convert command line
$cmdline =  $im_convert_exe + " `"" + $srcname  + "`"" + $options + " `"" 
+ $destname + "`" " 
#the following line runs the command
invoke-expression -command $cmdline  
$destitem = Get-item $destname
$info = [string]::Format( "{0} `t {1} `t {2} `t {3} `t {4} `t {5}", 
$count, 
$partial, $srcname, $destname, $srcitem.Length ,  $destitem.Length)
echo $info
Add-Content $fp $info
$count=$count+1
}