複数のsvgファイルの内容をマージする

複数のsvgファイルの内容をマージする

3つのsvgファイルがあり、これを1つのsvgファイルにマージしたいと思います。各ファイルにはパスタグがあり、各svgファイルのパスタグをファイルに入れたいと思います。スクリプトでこれを行う方法があると思いました。少なくともそれを願っています。何百ものファイルグループがあります。

ベストアンサー1

これが私が思いついたものです。これが最善の方法であるかどうかはわかりませんが、私が行ったいくつかのテストではうまくいくようです。ディレクトリ内のすべてのファイルで実行されるように変更します。

$file_1 = '1a.svg'
$file_1_con = Get-Content -raw -Path $file_1

$file_2 = '1b.svg'
$file_2_con = Get-Content -raw -Path $file_2

$file_3 = '1c.svg'
$file_3_con = Get-Content -raw -Path $file_3

$result = '.\1d.svg'

$xml_con = ''
$doc_con = ''
$svg_con = ''
$path_block_con = ''
$path_lines_con = ''
$path_pegs_con = ''
$end_con = '</svg>'
$group_start = '<g>'
$group_end = '</g>'


if ($file_1_con -match '<\?xml(?=\s|>)[^>]*>')      { $xml_con          = $Matches.Values }
if ($file_1_con -match '<\!DOCTYPE(?=\s|>)[^>]*>')  { $doc_con          = $Matches.Values }
if ($file_1_con -match '<svg(?=\s|>)[^>]*>')        { $svg_con          = $Matches.Values }
if ($file_1_con -match '<path(?=\s|>)[^>]*>')       { $path_block_con   = $Matches.Values.replace('black','red').replace('lightgray','none')   }
if ($file_2_con -match '<path(?=\s|>)[^>]*>')       { $path_lines_con   = $Matches.Values.replace('black','blue').replace('lightgray','none')  }
if ($file_3_con  -match '<path(?=\s|>)[^>]*>')      { $path_pegs_con    = $Matches.Values.replace('black','green').replace('lightgray','none') }

$xml_con+$doc_con+$svg_con+$group_start+$path_block_con+$path_lines_con+$path_pegs_con+$group_end+$end_con | Out-File -FilePath $result

おすすめ記事