Chuyển đổi một tài liệu Word thành Markdown mất vài giây với WordToMD. But what if you have 50, 100, or 500 .docx files to convert? That’s where batch conversion scripts come in. This guide covers the fastest approaches for khối Word thành Markdown chuyển đổi.
Khi bạn cần chuyển đổi hàng loạt
Nếu bạn có:
- Thư viện tài liệu cũ ở định dạng Word
- Báo cáo hàng tuần cần trở thành Markdown trang
- Một dự án di chuyển nội dung (Word → trang web tĩnh, wiki, hoặc cơ sở kiến thức)
- Nhiều tác giả gửi Word tài liệu xuất bản cho Markdown
Bạn cần chuyển đổi lô. Đối với các tập tin đơn lẻ, WordToMD vẫn là lựa chọn dễ nhất.
Pandoc: Phân tích chuyển đổi lô
Pandoc là công cụ tốt nhất để chuyển đổi lô. Cài đặt nó một lần, sau đó lập kịch bản cho bất kỳ khối lượng tệp nào.
Windows PowerShell Script
# convert-all.ps1
# Converts all .docx files in current directory to .md
$docxFiles = Get-ChildItem -Path "." -Filter "*.docx" -Recurse
foreach ($file in $docxFiles) {
$outputPath = [System.IO.Path]::ChangeExtension($file.FullName, ".md")
pandoc `
$file.FullName `
-t gfm `
--wrap=none `
--extract-media="./media" `
-o $outputPath
Write-Host "✓ $($file.Name) → $([System.IO.Path]::GetFileName($outputPath))"
}
Write-Host "Done. Converted $($docxFiles.Count) files."
Chạy đi.
.\convert-all.ps1
Bash Script (macOS / Linux)
#!/bin/bash
# convert-all.sh
# Converts all .docx files recursively
OUTPUT_DIR="./markdown-output"
mkdir -p "$OUTPUT_DIR"
find . -name "*.docx" | while read -r docx_file; do
filename=$(basename "$docx_file" .docx)
output="$OUTPUT_DIR/$filename.md"
pandoc \
"$docx_file" \
-t gfm \
--wrap=none \
--extract-media="$OUTPUT_DIR/media" \
-o "$output"
echo "✓ $docx_file → $output"
done
echo "Done."
Chạy đi.
chmod +x convert-all.sh
./convert-all.sh
Python Script cho trường hợp sử dụng nâng cao
Pythons python-docx thư viện và tiếp cận Pandoc subprocess cho phép kiểm soát nhiều hơn:
#!/usr/bin/env python3
"""
batch_convert.py — Convert all .docx files to Markdown with frontmatter injection
"""
import os
import subprocess
import sys
from pathlib import Path
from datetime import datetime
INPUT_DIR = Path("./word-docs")
OUTPUT_DIR = Path("./markdown-output")
OUTPUT_DIR.mkdir(exist_ok=True)
def convert_file(docx_path: Path) -> Path:
"""Convert a .docx file to GFM Markdown using Pandoc."""
output_path = OUTPUT_DIR / docx_path.with_suffix(".md").name
result = subprocess.run(
[
"pandoc",
str(docx_path),
"-t", "gfm",
"--wrap=none",
f"--extract-media={OUTPUT_DIR}/media",
"-o", str(output_path)
],
capture_output=True,
text=True
)
if result.returncode != 0:
print(f" ERROR: {result.stderr}", file=sys.stderr)
return None
return output_path
def add_frontmatter(md_path: Path, title: str) -> None:
"""Prepend YAML frontmatter to a Markdown file."""
frontmatter = f"""---
title: "{title}"
date: {datetime.now().strftime('%Y-%m-%d')}
draft: false
---
"""
content = md_path.read_text(encoding="utf-8")
md_path.write_text(frontmatter + content, encoding="utf-8")
def main():
docx_files = list(INPUT_DIR.glob("**/*.docx"))
if not docx_files:
print(f"No .docx files found in {INPUT_DIR}")
return
print(f"Converting {len(docx_files)} files...")
success = 0
for docx_path in docx_files:
print(f" Converting: {docx_path.name}")
output_path = convert_file(docx_path)
if output_path:
# Use filename (without extension) as title, replace hyphens/underscores
title = docx_path.stem.replace("-", " ").replace("_", " ").title()
add_frontmatter(output_path, title)
print(f" ✓ → {output_path.name}")
success += 1
else:
print(f" ✗ Failed: {docx_path.name}")
print(f"\nDone: {success}/{len(docx_files)} files converted.")
if __name__ == "__main__":
main()
Chạy đi.
python3 batch_convert.py
Thêm nội dung tự động
Máy phát điện tĩnh cần vật liệu mặt trước. Các kịch bản Python trên thêm tiền đề cơ bản. Để có cách tiếp cận đầy đủ hơn, hãy trích tiêu đề tài liệu từ tiêu đề H1 đầu tiên:
def extract_title(md_content: str) -> str:
"""Extract the first H1 heading as the title."""
for line in md_content.splitlines():
if line.startswith("# "):
return line[2:].strip()
return "Untitled"
Sau đó cập nhật add_frontmatter gọi để sử dụng tiêu đề được trích xuất.
Duy trì cấu trúc thư mục
Khi chuyển đổi cấu trúc thư mục được tổ hợp, duy trì phân cấp:
# Bash: preserve subdirectory structure
find ./word-docs -name "*.docx" | while read -r docx; do
# Calculate relative path
rel_path="${docx#./word-docs/}"
output_dir="./markdown-output/$(dirname "$rel_path")"
mkdir -p "$output_dir"
output="$output_dir/$(basename "$docx" .docx).md"
pandoc "$docx" -t gfm --wrap=none -o "$output"
echo "✓ $rel_path"
done
Quá trình xử lý hình ảnh trong quá trình chuyển đổi hàng loạt
Với --extract-media, Pandoc trích xuất tất cả các hình ảnh vào một thư mục. Thách thức: nhiều tệp .docx có thể tạo ra tệp có cùng tên (e.g., image1.png) Sử dụng một thư mục con cho mỗi tài liệu:
for docx_file in *.docx; do
slug="${docx_file%.docx}"
mkdir -p "./media/$slug"
pandoc "$docx_file" \
-t gfm \
--wrap=none \
--extract-media="./media/$slug" \
-o "$slug.md"
done
Hiệu suất cho các bộ lớn
Đối với tập tài liệu lớn (100+ tập tin):
- Pandoc xử lý một tập tin cho mỗi cuộc gọi điều này là tốt cho tối đa ~ 100 tập tin
- Đối với hơn 500 tệp, sử dụng GNU Parallel để xử lý đồng thời:
find . -name "*.docx" | \
parallel pandoc {} -t gfm --wrap=none -o {.}.md
Cài đặt GNU Parallel: brew install parallel / sudo apt install parallel
Chứng nhận chất lượng sản phẩm
Sau khi chuyển đổi hàng loạt, kiểm tra đầu ra của bạn:
- Lưu ý ngẫu nhiên Mở 5-10 tập tin được chuyển đổi và so sánh với bản gốc
- Số lượng bảng Đếm bảng trong một tài liệu và xác minh tất cả chúng đã được chuyển đổi
- Mức đầu Đảm bảo bảo tồn tại hệ thống phân cấp tiêu đề
- Các liên kết bị hỏng Tìm kiếm Markdown liên kết và xác minh chúng giải quyết
Một kịch bản kiểm tra đơn giản:
# Count files with no headings (might indicate conversion failure)
for md in ./markdown-output/*.md; do
if ! grep -q "^#" "$md"; then
echo "No headings found: $md"
fi
done
FAQ
Tôi có thể chuyển đổi các tập tin .doc (bình thức Word cũ) theo nhóm không?
Lưu chúng dưới dạng .docx trước. Tính năng macro Words có thể lưu tập: Công cụ → Macros → chạy macro SaveAs trên tất cả các tệp mở. LibreOffice cũng có thể chuyển đổi hàng loạt thông qua dòng lệnh: soffice --headless --convert-to docx *.doc.
Chuyển đổi tập hợp mất bao lâu? Pandoc chuyển đổi một tài liệu 10 trang điển hình trong vòng một giây. 100 tập tin = khoảng 1-2 phút. Các tài liệu rất lớn (100+ trang) mất nhiều thời gian hơn.
Tôi đang nhận được pandoc: lệnh không tìm thấy trong kịch bản của tôi.
Đảm bảo Pandoc được cài đặt và trên PATH của bạn. Chạy đi. which pandoc (macOS/Linux) hoặc Get-Command pandoc (PowerShell) để kiểm tra.
Tôi có thể chạy chuyển đổi tập hợp trên Windows mà không cần PowerShell không?
Có sử dụng a .bat file hoặc cài đặt Git Bash để chạy các kịch bản bash.
Hướng dẫn liên quan
- Pandoc Word đến Markdown Phạm vi Pandoc tham chiếu
- Word đến Static Site Generator Phát hành nội dung được chuyển đổi
- Word đến GitBook Di cư đến GitBook
Kết luận
Chuyển đổi batch Word thành Markdown là thẳng thắn với Pandoc và một vài dòng kịch bản. Các kịch bản PowerShell và Bash ở trên xử lý hầu hết các kịch bản. Đối với mặt tiền tùy chỉnh, bảo tồn cấu trúc thư mục, hoặc xử lý hình ảnh, kịch bản Python cho bạn toàn quyền kiểm soát. Đối với việc chuyển đổi một lần, WordToMD vẫn là lựa chọn nhanh nhất.