Comandă de lot pentru ImageMagick pentru a converti toate fișierele dintr-un director și subdirectoare pe Windows (Programare, Windows, Fișier Batch, Svg, Imagemagick, Imagemagick Convert)

Cheie a intrebat.

Am mii de fișiere SVG într-un folder și subfoldere. Ceea ce vreau este să le convertesc pe lot toate în jpg sau png imagini.

Poate cineva să mă ajute să scriu o comandă pentru ImageMagick (windows), care poate găsi și converti toate svg-urile în jpg/png cu numele lor originale și să le păstreze în aceleași directoare?

Iată structura de exemplu:

C:SVGBusinessMan.svg
C:SVGModelsHome.svg
C:SVGUnderlinesunderline.svg

Și vreau ca după conversie să fie așa:

C:SVGBusinessMan.svg
C:SVGBusinessMan.jpg
C:SVGModelsHome.svg
C:SVGModelsHome.jpg
C:SVGUnderlinesunderline.svg
C:SVGUnderlinesunderline.jpg

3 răspunsuri
Andrea

Încercați cu un FOR bucla cu /R flag din interiorul folderului rădăcină:

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

această comandă va converti toate .svg fișierele din subdirectoarele dvs. din dosarul rădăcină din care ați lansat comanda.

Comanda de mai sus funcționează pentru linia de comandă, dacă intenționați să utilizați comanda în interiorul unui fișier batch (.bat) nu uitați să utilizați %% în loc de %:

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

A se vedea acest pagina din documentația Imagemagick pentru mai multe informații

temi007

nu aveți nevoie de scripting shell, folosiți doar scriptul mogrify comanda

cd în directorul de imagini

mogrify -format png *.svg

Comentarii

  • Cea mai bună soluție într-adevăr! Folosind comanda -format împiedică suprascrierea fișierului. Documentația aici : imagemagick.org/script/mogrify.php –  > Por kotchwane.
  • Există, de asemenea, opțiunea -path opțiunea de a scrie ieșirea într-un alt dosar în loc să se suprascrie –  > Por Nimeni.
  • găsiți . -name ‘*.webp’ -exec mogrify -format png {} ; –  > Por Gregory Alan Bolcer.
bobkush

Am creat următorul script din diverse resurse online pentru a converti fișiere atunci când aveam multe imagini în multe subdirectoare de procesat. Acest script include, de asemenea, un afișaj al progresului. A fost testat cu ImageMagick 7. Sper că îl veți găsi util.


#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:tempconvert.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
}