Inkscape shell 循环来自 windows powershell
Inkscape shell loop from windows powershell
我在 Windows powershell 中编写了一个简单的脚本来遍历一些 SVG 文件并在导出之前对页面区域进行调整。这很好用,但速度相对较慢。因此,我想尝试使用 Inkscape 的 shell 模式,但我对如何进行这项工作感到非常困惑。我已经尝试过此页面 https://inkscape.org/doc/inkscape-man.html 中使用的方法,但没有成功。这是我的 'working but slow' 脚本,用于展示我正在尝试做的事情:
$files = Get-ChildItem "C:\temp\SVG Charts" -filter *.svg
# Starts a FOR loop which runs through each of the files from above
foreach ($f in $files){
# Prepare the name of the outputted file
# So you don't save over the originals
$outfile = $f.DirectoryName + "\Adjusted_" + $f.BaseName + ".svg"
# Run inkscape
# The export-area-drawing command below simply resets the print area of the SVG
inkscape $f.FullName --export-area-drawing --export-plain-svg $outfile
}
下面是我尝试的 shell 版本。我想我的循环结构不正确,需要将 inkscape --shell
放在循环之外,但是它只是挂起,等待输入。如果我把它放在循环中,然后系统会提示我为每次迭代键入 quit 然后我会看到很多红色错误文本,我认为这可能与下一点有关......似乎有几种不同的方式编写 shell 命令,我什至不知道我是否使用了正确的方法!我正在努力解决最后一点,因为我不知道我是否以正确的方式设置了循环以使用 shell.
$files = Get-ChildItem "C:\temp\SVG Charts" -filter *.svg
# Starts a FOR loop which runs through each of the files from above
foreach ($f in $files){
# Prepare the name of the outputted file
# So you don't save over the originals
$outfile = $f.DirectoryName + "\Adjusted_" + $f.BaseName + ".svg"
# The export-area-drawing command below simply resets the print area of the SVG
inkscape --shell
file-open:$f.FullName; export-area-drawing; export-filename:$outfile; export-do
}
我的问题是:我应该如何构造这个 Powershell 循环以及我应该对 运行 shell 命令使用什么语法?
我运行正在使用相对较旧的 Inkscape 版本,这无疑没有帮助:Inkscape 0.92.3
按照 Moini 的建议,请升级您的 Inkscape 版本。我只能使用最新的 Inkscape 版本 1.0.1 来完成这项工作:
# Avoid specifying long file paths in Inkscape commands...
Set-Location -Path 'C:\Temp\SVG Charts'
# Build-up a list of actions to send to Inkscape...
[string]$actions = ''
$files = Get-ChildItem -Filter *.svg
foreach ($f in $files) {
$actions += "file-open:$($f.Name); export-area-drawing; export-filename:Adjusted_$($f.Name); export-do`r`n"
}
# Ensure to end your list of actions with 'quit', then pipe it to Inkscape...
"$actions`r`nquit" | & "C:\Program Files\Inkscape\bin\inkscape.com" --shell
希望这个简短的示例对您有所帮助。
我在 Windows powershell 中编写了一个简单的脚本来遍历一些 SVG 文件并在导出之前对页面区域进行调整。这很好用,但速度相对较慢。因此,我想尝试使用 Inkscape 的 shell 模式,但我对如何进行这项工作感到非常困惑。我已经尝试过此页面 https://inkscape.org/doc/inkscape-man.html 中使用的方法,但没有成功。这是我的 'working but slow' 脚本,用于展示我正在尝试做的事情:
$files = Get-ChildItem "C:\temp\SVG Charts" -filter *.svg
# Starts a FOR loop which runs through each of the files from above
foreach ($f in $files){
# Prepare the name of the outputted file
# So you don't save over the originals
$outfile = $f.DirectoryName + "\Adjusted_" + $f.BaseName + ".svg"
# Run inkscape
# The export-area-drawing command below simply resets the print area of the SVG
inkscape $f.FullName --export-area-drawing --export-plain-svg $outfile
}
下面是我尝试的 shell 版本。我想我的循环结构不正确,需要将 inkscape --shell
放在循环之外,但是它只是挂起,等待输入。如果我把它放在循环中,然后系统会提示我为每次迭代键入 quit 然后我会看到很多红色错误文本,我认为这可能与下一点有关......似乎有几种不同的方式编写 shell 命令,我什至不知道我是否使用了正确的方法!我正在努力解决最后一点,因为我不知道我是否以正确的方式设置了循环以使用 shell.
$files = Get-ChildItem "C:\temp\SVG Charts" -filter *.svg
# Starts a FOR loop which runs through each of the files from above
foreach ($f in $files){
# Prepare the name of the outputted file
# So you don't save over the originals
$outfile = $f.DirectoryName + "\Adjusted_" + $f.BaseName + ".svg"
# The export-area-drawing command below simply resets the print area of the SVG
inkscape --shell
file-open:$f.FullName; export-area-drawing; export-filename:$outfile; export-do
}
我的问题是:我应该如何构造这个 Powershell 循环以及我应该对 运行 shell 命令使用什么语法?
我运行正在使用相对较旧的 Inkscape 版本,这无疑没有帮助:Inkscape 0.92.3
按照 Moini 的建议,请升级您的 Inkscape 版本。我只能使用最新的 Inkscape 版本 1.0.1 来完成这项工作:
# Avoid specifying long file paths in Inkscape commands...
Set-Location -Path 'C:\Temp\SVG Charts'
# Build-up a list of actions to send to Inkscape...
[string]$actions = ''
$files = Get-ChildItem -Filter *.svg
foreach ($f in $files) {
$actions += "file-open:$($f.Name); export-area-drawing; export-filename:Adjusted_$($f.Name); export-do`r`n"
}
# Ensure to end your list of actions with 'quit', then pipe it to Inkscape...
"$actions`r`nquit" | & "C:\Program Files\Inkscape\bin\inkscape.com" --shell
希望这个简短的示例对您有所帮助。