我们会用到一个叫 pandoc 的小工具,再结合python 脚本。
-
下载 pandoc工具,https://github.com/jgm/pandoc/releases/latest
-
本地打开一个终端,输入 pandoc -v
-
先本地装好可以运行python(3.7以上) 的环境,大家自行网上查找 python 的安装教程,此文不再赘述。
运行以下python脚本,注意 设置输入和输出文件夹路径:
import os
import pypandoc
import subprocess
def convert_md_to_doc(md_file, output_folder):
"""
使用 pandoc 将单个 Markdown 文件转换为 DOC 文件,并处理图片
"""
# 获取文件名(不带扩展名)
file_name = os.path.splitext(os.path.basename(md_file))[0]
print('current file name',file_name)
# 设置输出文件路径
#output_file = os.path.join(output_folder, f"{file_name}.docx")
output_file = os.path.join(os.path.dirname(md_file), f"{file_name}.docx")
if os.path.exists(output_file):
pass
else:
with open(output_file,'w') as f:
f.close()
print('output file path is',output_file)
# 使用 pandoc 进行转换
cmd = 'pandoc'+" "+md_file+' -o '+output_file+' --extract-media=.'
father_dir = os.path.dirname(md_file)
# 进入到 markdown 所在文件夹目录
os.chdir(father_dir)
os.system(cmd)
#subprocess.run(cmd,shell=True)
# subprocess.run([
# "pandoc", md_file, "-o", output_file, "--extract-media=."
# ])
print(f"Converted {md_file} to {output_file}")
def batch_convert_md_to_doc(input_folder, output_folder):
"""
批量将指定文件夹中的 Markdown 文件转换为 DOC 文件
"""
# 确保输出文件夹存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 遍历输入文件夹中的所有 Markdown 文件
for root, dirs, files in os.walk(input_folder):
for file in files:
if file.endswith(".md"):
md_file = os.path.join(root, file)
convert_md_to_doc(md_file, output_folder)
if __name__ == "__main__":
# 设置输入和输出文件夹路径
input_folder = "your input path"
output_folder = "your output path"
# 执行批量转换
batch_convert_md_to_doc(input_folder, output_folder)
运行成功后:
注意一下,针对于 markdown 中 的图片,最好使用相对路径,如本文示例图片都是在 figures 文件夹中。
遇到的问题:
由于我使用的是 vscode 运行代码,在调用终端时发现 pandoc 不支持,但是电脑环境的终端是支持 pandoc的。
查找资料后,发现是 vscode 的终端环境变量和 电脑自带的终端环境变量不一致。
解决方法:
打开 vscode settings.json,将 vscode 的环境变量和 电脑的保持一致:
加入 这句
“terminal.integrated.env.windows”: {
“PATH”: “${env:PATH}”,
{
"python.defaultInterpreterPath": "C:\\Users\\AppData\\Local\\Programs\\Python\\Python38\\python.exe",
"launch": {
"configurations": [
]
},
"cmake.showOptionsMovedNotification": false,
"terminal.integrated.defaultProfile.windows": "PowerShell",
"terminal.integrated.env.windows": {
"PATH": "${env:PATH}", // 保留系统 PATH
}
}