【问题标题】:Inkscape commandline convert list of filesInkscape 命令行转换文件列表
【发布时间】:2021-05-22 20:32:27
【问题描述】:

我在 Powershell 中使用 Windows 批处理脚本将文件夹中所有编号的 .svg 文件转换为 .png,在命令行上使用 Inkscape,基于对上一个问题 here 的回答。

@echo off
for %%i in ("%~dp0*.svg") do (
    echo %%i to %%~ni.png
    "C:\Program Files\Inkscape\bin\inkscape.com" --export-type="png" --export-background-opacity=1.0 "%%i"
)

脚本为每个文件再次调用 Inkscape,我怀疑这是主要的速度瓶颈(我有很多文件要转换)。我宁愿调用一次 Inkscape 并提供要转换的文件列表。

是否可以使用--shell 模式来执行此操作?我找不到使用这种方法的示例。

【问题讨论】:

  • 谢谢我已阅读文档。那里的示例数量有限,没有看到我希望做的示例,但我解决了问题并发布了自己的答案。
  • Inkscape 似乎是一个开源项目。任何人都可以更改代码来做他们想做的事。可能有足够的兴趣可以将其贡献回包中。 inkscape.org/contribute
  • 是的,他们可以。
  • 您可以使用 ImageMagickmagick mogrify -format PNG *.svg 将目录中的所有 SVG 文件转换为 PNG

标签: windows shell svg cmd inkscape


【解决方案1】:

我发现的一种方法是使用交互式--shell 模式和一系列“动作”和“动词”,例如:

inkscape --shell
> file-open:file001.svg;export-filename:file001.png;export-do; file-open:file002.svg;export-filename:file002.png;export-do;

您可以生成这些动作和动词序列的长列表,每个文件一个。它工作得很好,但不幸的是,我无法为我想要转换的数千个 SVG 文件粘贴足够大的文本字符串。我认为 Powershell 受到您可以粘贴到其中的文本数量的限制,as is the usual command prompt

因此,如果 Inkscape 的未来版本能够接受包含此类命令列表的批处理文件,那就太好了。据我从文档中可以看出,目前这似乎不可能。

【讨论】:

    【解决方案2】:

    根据您自己的回答,我创建了一个名为 inkscape.cmd 的 10,000 行文件,如下所示:

    inkscape-version
    inkscape-version
    inkscape-version
    ...
    ...
    

    然后运行它:

    inkscape --shell < inkscape.cmd
    

    我只在 macOS 上测试过这个,因为我没有 Windows。

    【讨论】:

    • 你解决了吗,好吗?
    • 谢谢,但没有。至少在 Windows 中,将文件重定向到 Inkscape shell 模式不能正常工作。我收到一个错误&gt; Unable to find: file-open。它只有在我进入交互式 shell 模式并粘贴命令时才有效,就像我在回答中所做的那样。
    猜你喜欢
    • 2016-04-16
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2016-05-01
    • 2012-05-17
    • 1970-01-01
    • 2018-06-15
    相关资源
    最近更新 更多