【问题标题】:Concatenate multiple Markdown files using Pandoc on Windows在 Windows 上使用 Pandoc 连接多个 Markdown 文件
【发布时间】:2018-10-03 08:55:30
【问题描述】:

我在一个文件夹中有几个 Markdown (.md) 文件,我想将它们连接起来并使用 Pandoc 获得最终的 Markdown 文件。我写了一个这样的bash文件:

#!/bin/bash 
pandoc *.md > final.md

但是当我双击它时出现以下错误:

pandoc: *.md: openBinaryFile: 无效参数(Invalid argument)

final.md 文件为空。

如果我试试这个:

pandoc file1.md file2.md .... final.md 

我得到了我期望的结果:一个 final.md 文件,其中包含所有其他 Markdown 文件的内容。

在 macOS 上运行良好。为什么这在 Windows 上不起作用?

【问题讨论】:

  • 该目录中的ls *.md 提供了什么?
  • ls *.md 返还我用于测试的 3 个 md 文件。 file1.md、file2.md 和 file3.md
  • 你是如何运行你的脚本的?看起来您的 shell 由于某种原因无法扩展文件 glob……
  • 啊。我猜你在Windows上?您使用的是 cmd.exe 还是 PowerShell?
  • @Chris 我刚刚找到了解决方案。根据您的评论,我尝试通过 Cygwin 运行它,例如 bash run.sh,最终文件现在有了内容。我不知道为什么,但是如果我尝试双击当前目录中的文件,我得到的文件没有内容

标签: windows bash cmd markdown pandoc


【解决方案1】:

在类 Unix shell(如 bash,您的脚本是为其编写的)上,全局扩展(例如,将 *.md 转换为 file1.md file2.md file3.md)是 performed by the shell,而不是您正在运行的应用程序。您的应用程序会看到最终的文件列表,而不是通配符。

但是,cmd.exe 中的全局扩展由 应用程序 执行:

Windows 命令解释器 cmd.exe 依赖应用程序中的运行时函数来执行通配。

因此,当 Pandoc 期望看到像 file1.md file2.md file3.md 这样的文件列表时,它被传递了一个文字 *.md。它不知道如何扩展 glob 本身并尝试打开一个名为 *.md 的文件。

您应该能够在 Cygwin 或 bash on Windows 等类似 unix 的 shell 中运行 bash 脚本。它也可以在 PowerShell 上运行,尽管我没有方便测试的机器。作为最后的手段,您可以jump through some hoops 编写一个批处理文件,扩展 glob 并将文件名传递给 Pandoc。

【讨论】:

  • 这适用于 PowerShell:pandoc (get-item *.md).FullName -o final.md
  • 我为 Windows 编写了一个普通的旧批处理文件,它将在目录及其子目录上递归操作,查找特定类型的文件,然后将它们发送到 pandoc。我称之为pancompile.bat。代码在这个答案中:stackoverflow.com/questions/41471253/…。毫无疑问,它可以在 PowerShell 中更好地重写,但它对我有用。
猜你喜欢
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多