batch automation pandoc word markdown

Word को Markdown में बैच कन्वर्ट करें: बल्क दस्तावेज़ रूपांतरण के लिए स्क्रिप्ट

एक बार में कई Word (.docx) फ़ाइलों को Markdown में कैसे बैच रूपान्तरित करें. विंडोज, मैकओएस और लिनक्स के लिए Pandoc स्क्रिप्ट को कवर करता है, साथ ही उन्नत उपयोग के मामलों के लिए पायथन स्वचालन।

W
__पी_ए__ टीम
·

एकल 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 bulk Word to Markdown रूपांतरण.

जब आपको बैच रूपांतरण की आवश्यकता हो

यदि आपके पास:

  • Word प्रारूप में एक विरासत प्रलेखन पुस्तकालय
  • साप्ताहिक रिपोर्ट जो Markdown पृष्ठ बनने की आवश्यकता है
  • एक सामग्री प्रवासन परियोजना (Word → स्थैतिक साइट, विकी, या ज्ञान आधार)
  • कई लेखकों द्वारा Word डॉक्स को प्रस्तुत किया जा रहा है जो Markdown को प्रकाशित करते हैं

आप बैच रूपांतरण की जरूरत है. एकल फ़ाइलों के लिए, WordToMD सबसे आसान विकल्प है।

Pandoc: बैच रूपांतरण रीढ़

Pandoc बैच रूपांतरण के लिए सबसे अच्छा उपकरण है। इसे एक बार इंस्टॉल करें, फिर फ़ाइलों के किसी भी वॉल्यूम के लिए इसे स्क्रिप्ट करें.

विंडोज पावरशेल स्क्रिप्ट

# 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

बैश स्क्रिप्ट (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

फ़्रंटमैटर स्वचालित रूप से जोड़ना

स्थैतिक साइट जनरेटर फ्रंटमैटर की जरूरत है। ऊपर दी गई पायथन स्क्रिप्ट में बुनियादी फ्रंटमैटर जोड़ा गया है. अधिक पूर्ण दृष्टिकोण के लिए, प्रथम 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

जीएनयू समानांतर स्थापित करें: brew install parallel / sudo apt install parallel

आउटपुट गुणवत्ता का सत्यापन

बैच रूपांतरण के बाद, अपने आउटपुट को स्पॉट-चेक करें:

  1. यादृच्छिक नमूना 5-10 परिवर्तित फ़ाइलें खोलें और मूल के साथ तुलना करें
  2. तालिकाओं की गिनती दस्तावेज़ में तालिकाओं की गिनती करें और वे सभी परिवर्तित हैं सत्यापित करें
  3. पद स्तर शीर्षक पदानुक्रम को संरक्षित करना
  4. टूटे हुए लिंक 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) की जाँच करने के लिए.

क्या मैं PowerShell के बिना Windows पर बैच रूपांतरण चला सकता हूँ? हाँ a का प्रयोग करें .bat बाश स्क्रिप्ट चलाने के लिए Git Bash को फ़ाइल या इंस्टॉल करें.

निष्कर्ष

बैच Word से Markdown रूपांतरण Pandoc और स्क्रिप्टिंग की कुछ पंक्तियों के साथ सीधा है। उपर्युक्त PowerShell और Bash स्क्रिप्ट अधिकांश परिदृश्यों को संभालते हैं. कस्टम फ्रंटमैटर, निर्देशिका संरचना संरक्षण, या छवि हैंडलिंग के लिए, पायथन स्क्रिप्ट आपको पूर्ण नियंत्रण देता है. एक बार के रूपांतरणों के लिए, WordToMD सबसे तेज़ विकल्प है।