batch automation pandoc word markdown

Batch Konvertieren Word zu Markdown: Skripte für die Massenkonvertierung von Dokumenten

Wie man mehrere Word (.docx) Dateien gleichzeitig in Markdown konvertiert. Deckt Pandoc-Skripte für Windows, macOS und Linux sowie Python-Automatisierung für fortgeschrittene Anwendungsfälle ab.

W
WordToMD-Team
·

Konvertieren eines einzelnen Word Dokument zu Markdown dauert Sekunden mit 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 Umwandlung von bulk Word in Markdown.

Wenn Sie eine Batch-Umwandlung benötigen

Wenn Sie:

  • Eine alte Dokumentationsbibliothek im Word-Format
  • Wöchentliche Berichte, die Markdown-Seiten werden müssen
  • Ein Projekt zur Migration von Inhalten (Word → statische Website, Wiki oder Wissensdatenbank)
  • Mehrere Autoren, die Word-Dokumente einreichen, die an Markdown veröffentlicht werden

Du brauchst eine Batch-Umwandlung. Für einzelne Dateien WordToMD bleibt die einfachste Option.

Pandoc: Die Rückseite der Batch-Umwandlung

Pandoc ist das beste Werkzeug für die Batch-Umwandlung. Installieren Sie es einmal, dann schreiben Sie es für jedes Volumen von Dateien.

Das Windows PowerShell-Skript

# 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."

Lassen Sie es laufen:

.\convert-all.ps1

Bash-Skript (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."

Lassen Sie es laufen:

chmod +x convert-all.sh
./convert-all.sh

Python-Skript für fortgeschrittene Anwendungsfälle

Pythons python-docx Bibliothek und Pandoc-Unterprozess-Ansatz gibt mehr Kontrolle:

#!/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()

Lassen Sie es laufen:

python3 batch_convert.py

Automatisches Hinzufügen von Vorderseiten

Static-Site-Generatoren brauchen Frontmatter. Das Python-Skript oben fügt grundlegende Vormaterialien hinzu. Für einen vollständigen Ansatz entnehmen Sie den Titel des Dokuments aus der ersten Überschrift 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"

Dann aktualisieren Sie die add_frontmatter Aufruf zur Verwendung des extrahierten Titels.

Bewahrung der Verzeichnisstruktur

Bei der Konvertierung einer verschachtelten Ordnerstruktur wird die Hierarchie beibehalten:

# 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

Bildverarbeitung in der Batch-Konvertierung

Mit --extract-mediaPandoc extrahiert alle Bilder in einen Ordner. Die Herausforderung: Mehrere .docx-Dateien können Dateien mit identischen Namen erzeugen (e.g., image1.png) sind. Verwenden Sie ein Unterverzeichnis pro Dokument:

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

Leistung für große Sets

Für große Dokumentensätze (100+ Dateien):

  • Pandoc verarbeitet eine Datei pro Anrufung das ist in Ordnung für bis zu ~100 Dateien
  • Für mehr als 500 Dateien verwenden Sie GNU Parallel für die gleichzeitige Verarbeitung:
find . -name "*.docx" | \
parallel pandoc {} -t gfm --wrap=none -o {.}.md

Installieren Sie GNU Parallel: brew install parallel / sudo apt install parallel

Validierung der Ausgangsqualität

Nach der Batch-Konvertierung überprüfen Sie Ihren Ausgang:

  1. Zufällige Stichprobe Öffnen Sie 5-10 konvertierte Dateien und vergleichen Sie mit den Originalen
  2. Tabellenzahl Zählen Sie Tabellen in einem Dokument und überprüfen Sie, ob sie alle konvertiert wurden
  3. Überschwemmungsniveaus Gewährleistung der Wahrung der Überschriftenhierarchie
  4. Gebrochene Verbindungen Suchen Sie nach Markdown-Links und überprüfen Sie, ob sie gelöst werden

Ein einfaches Check-Skript:

# 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

Kann ich .doc-Dateien (altes Word-Format) in Gruppen konvertieren? Speichern Sie sie als .docx zuerst. Words Makro-Funktion kann Batch-Speichern: Tools → Makros → ein SaveAs-Makro über alle geöffneten Dateien ausführen. LibreOffice kann auch Batch-Konvertieren über die Befehlszeile: soffice --headless --convert-to docx *.doc.

Wie lange dauert die Batch-Umwandlung? Pandoc konvertiert ein typisches 10-seitiges Dokument in weniger als einer Sekunde. 100 Dateien = etwa 1-2 Minuten. Sehr große Dokumente (100+ Seiten) dauern länger.

Ich bekomme pandoc: Befehl nicht gefunden in meinem Skript. Stellen Sie sicher, dass Pandoc installiert ist und auf Ihrem PATH. Lauf ! which pandoc (macOS/Linux) oder Get-Command pandoc (PowerShell) zu überprüfen.

Kann ich die Batch-Konvertierung auf Windows ohne PowerShell ausführen? Ja Verwenden Sie a .bat File oder installieren Sie Git Bash, um die Bash-Skripte auszuführen.

Schlußfolgerung

Batch Word zu Markdown Umwandlung ist einfach mit Pandoc und ein paar Zeilen Skript. Die oben genannten PowerShell- und Bash-Skripte behandeln die meisten Szenarien. Für benutzerdefinierte Front-Matter, Verzeichnis-Struktur-Erhaltung oder Bild-Handhabung, das Python-Skript gibt Ihnen volle Kontrolle. Für einmalige Umwandlungen WordToMD bleibt die schnellste Option.