Преобразование одного Word документа в Markdown занимает секунды с 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 массовое преобразование Word в Markdown.
Когда необходимо перевести на групповую
Если у вас есть:
- Библиотека устаревшей документации в формате Word
- Еженедельные отчеты, которые должны стать Markdown страницами
- Проект миграции контента (Word → статический сайт, вики или база знаний)
- Многочисленные авторы отправляют Word документы, которые публикуются на Markdown
Вам нужно преобразование партий. Для отдельных файлов: WordToMD остается самым простым вариантом.
Pandoc: Обратная основа конверсии партий
Pandoc является лучшим инструментом для конвертации партий. Установите его один раз, а затем сканируйте его для любого объема файлов.
Скрипты Windows PowerShell
# 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."
Запустите:
.\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."
Запустите:
chmod +x convert-all.sh
./convert-all.sh
Питонский скрипт для расширенных случаев использования
Питоны python-docx подход к библиотеке и Pandoc подпроцессу дает больше контроля:
#!/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()
Запустите:
python3 batch_convert.py
Автоматическое добавление материала
Генераторы статического сайта нуждаются в материале. Скрипт Python добавляет базовый фронтмат. Для более полного подхода извлечь заголовок документа из первого заголовка H1:
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"
Затем обновить add_frontmatter призыв использовать выдержанный заголовок.
Сохранение структуры каталога
При преобразовании структуры вложенных папок сохраняется иерархия:
# 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
Обработка изображений при конвертации в батах
В том числе: --extract-media, Pandoc извлекает все изображения в папку. Проблема: множество .docx файлов может создавать файлы с одинаковыми именами (e.g., image1.png) и т.д. Использовать подкаталог на документ:
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
Исполнение для больших наборов
Для больших наборов документов (100+ файлов):
- Pandoc обрабатывает один файл за вызов это нормально для до ~100 файлов
- Для более чем 500 файлов используйте GNU Parallel для одновременной обработки:
find . -name "*.docx" | \
parallel pandoc {} -t gfm --wrap=none -o {.}.md
Установка GNU Parallel: brew install parallel / sudo apt install parallel
Валидация качества выпуска
После конвертации партии проверьте вывод:
- Случайная выборка Откройте 5-10 конвертированных файлов и сравните с оригиналами
- Счет таблиц Считайте таблицы в документе и проверьте, что все они конвертированы
- Уровни заголовков Обеспечить сохранение иерархии заголовков
- Разбитые ссылки Поиск Markdown ссылок и проверка их разрешения
Простой скрипт проверки:
# 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
Могу ли я конвертировать .doc файлы (старый Word формат)?
Сначала сохраните их как .docx. Функция макроса Words может сохранять в батах: Инструменты → Макросы → запускать макрос SaveAs во всех открытых файлах. LibreOffice также может преобразовывать в бач через командную строку: soffice --headless --convert-to docx *.doc.
Сколько времени занимает преобразование партии? Pandoc преобразует типичный 10-страничный документ менее чем за секунду. 100 файлов = примерно 1-2 минуты. Очень большие документы (более 100 страниц) занимают больше времени.
Я получаю команду "pandoc": не найдена в моем сценарии.
Убедитесь, что Pandoc установлен и на вашем PATH. Беги ! which pandoc (macOS/Linux) или Get-Command pandoc (PowerShell) для проверки.
Могу ли я запустить партийное преобразование в Windows без PowerShell?
Да используйте .bat файл или установить Git Bash для запуска скриптов bash.
Соответствующие руководства
- Pandoc Word до Markdown Полная Pandoc ссылка
- Word на генератор статического сайта Публикация конвертированного контента
- Word к GitBook Миграция в GitBook
Заключение
Преобразование партии Word в Markdown простой с Pandoc и несколькими строками сценария. Скрипты PowerShell и Bash, приведенные выше, справляются с большинством сценариев. Для персонализированного фронта, сохранения структуры каталога или обработки изображений, скрипт Python дает вам полный контроль. Для одноразовых преобразований: WordToMD остается самым быстрым вариантом.