Converter um único documento Word para Markdown leva segundos com 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 Conversão em massa de Word para Markdown.
Quando você precisa de conversão em lote
Se tiver:
- Uma biblioteca de documentação legada no formato Word
- Relatórios semanais que precisam tornar-se páginas Markdown
- Um projeto de migração de conteúdo (Word → site estático, wiki ou base de conhecimento)
- Múltiples autores submetendo Word documentos que publicam para Markdown
Precisas de conversão em lote. Para arquivos individuais, WordToMD continua a ser a opção mais fácil.
Pandoc: O backbone da conversão por lotes
Pandoc é a melhor ferramenta para a conversão por lotes. Instala-o uma vez, depois scripte-o para qualquer volume de arquivos.
Script do 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."
Corra:
.\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."
Corra:
chmod +x convert-all.sh
./convert-all.sh
Python Script para casos de uso avançados
Pythons python-docx biblioteca e Pandoc subprocesso abordagem dá mais controle:
#!/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()
Corra:
python3 batch_convert.py
Adicionamento automático de conteúdo
Os geradores estáticos precisam de material de frente. O script Python acima adiciona matéria de frente básica. Para uma abordagem mais completa, extraia o título do documento do primeiro título 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"
Então, atualize o add_frontmatter Aplicar o título extraído.
Preservar a estrutura do diretório
Ao converter uma estrutura de pastas aninhadas, manter a hierarquia:
# 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
Manuseio de imagens em conversão por lotes
Com --extract-media, Pandoc extrai todas as imagens para uma pasta. O desafio: múltiplos arquivos .docx podem produzir arquivos com nomes idênticos (e.g., image1.png)). Use um subdiretório por documento:
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
Desempenho para grandes conjuntos
Para grandes conjuntos de documentos (100+ ficheiros):
- Pandoc processa um arquivo por invocação isso é bom para até ~ 100 arquivos
- Para mais de 500 arquivos, use o GNU Parallel para processamento simultâneo:
find . -name "*.docx" | \
parallel pandoc {} -t gfm --wrap=none -o {.}.md
Instalar o GNU Parallel: brew install parallel / sudo apt install parallel
Validação da qualidade do produto
Após a conversão por lotes, verifique a sua saída:
- Amostra aleatória Abrir 5-10 arquivos convertidos e comparar com os originais
- Contagem das mesas Contar tabelas em um documento e verificar se todas foram convertidas
- Níveis de cabeçalho Garantir a preservação da hierarquia de cabeçalhos
- Ligações quebradas Procure Markdown links e verifique se eles resolvem
Um script de verificação simples:
# 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
Posso converter por lotes arquivos .doc (formato Word antigo)?
Salve-os como .docx primeiro. O recurso de macro Words pode salvar em lote: Ferramentas → Macros → executar uma macro SaveAs em todos os arquivos abertos. O LibreOffice também pode converter em lotes via linha de comando: soffice --headless --convert-to docx *.doc.
Quanto tempo leva a conversão em lote? Pandoc converte um documento típico de 10 páginas em menos de um segundo. 100 arquivos = aproximadamente 1-2 minutos. Documentos muito grandes (mais de 100 páginas) demoram mais tempo.
Estou a receber o comando "pandoc" não encontrado no meu script.
Certifique-se de que Pandoc está instalado e no seu PATH. Corra . which pandoc (macOS/Linux) ou Get-Command pandoc (PowerShell) para verificar.
Posso executar a conversão por lotes no Windows sem o PowerShell?
Sim utilizar um .bat arquivo ou instalar o Git Bash para executar os scripts bash.
Guia Relacionado
- Pandoc Word para Markdown Referência Pandoc completa
- Word para o gerador de site estático Publicação de conteúdos convertidos
- Word para GitBook Migração para GitBook
Conclusão
Conversão de lote Word para Markdown é direto com Pandoc e algumas linhas de script. Os scripts PowerShell e Bash acima lidam com a maioria dos cenários. Para frontmatter personalizado, preservação de estrutura de diretório, ou manipulação de imagens, o script Python dá-lhe controle total. Para conversões pontuais, WordToMD continua a ser a opção mais rápida.