Si administra una carpeta grande de documentos de Word heredados guardados en el formato .doc antiguo, abrir cada archivo uno por uno para convertirlo a .docx le hace perder tiempo. El formato .doc es el formato binario que usaban Word 97 a Word 2003, mientras que .docx es el formato más reciente basado en XML introducido en Word 2007. Este artículo explica cómo usar un script de PowerShell para convertir todos los archivos .doc de una carpeta al formato .docx en una sola operación.
El script automatiza Word a través de su modelo de objetos COM, abriendo cada archivo .doc y guardándolo como .docx sin intervención manual. No necesita instalar software adicional más allá de Word y PowerShell, ambos incluidos en Windows 10 y Windows 11. Después de seguir esta guía, podrá ejecutar la conversión en cualquier carpeta y, opcionalmente, eliminar los archivos .doc originales.
Puntos clave: conversión masiva de .doc a .docx mediante PowerShell
- Script de PowerShell con el objeto COM de Word (New-Object -ComObject Word.Application): Abre Word en segundo plano y automatiza la conversión de archivos sin mostrar la ventana de Word.
- Get-ChildItem -Filter doc: Encuentra todos los archivos .doc en una carpeta y sus subcarpetas para procesarlos por lotes.
- Método Document.SaveAs2 con wdFormatDocumentDefault (16): Guarda cada archivo como .docx usando la constante de formato predeterminado de Word.
Por qué usar PowerShell para la conversión masiva de .doc a .docx
Word puede abrir archivos .doc de forma nativa y guardarlos como .docx, pero carece de una herramienta de conversión por lotes integrada. La interfaz gráfica requiere que abra cada archivo, elija Guardar como, seleccione el formato .docx y confirme la ubicación de guardado. Para cientos de archivos, este proceso no es práctico.
PowerShell puede automatizar Word mediante la interfaz COM (Component Object Model). El script inicia una instancia invisible de Word, abre cada archivo .doc, lo guarda como .docx usando la constante wdFormatDocumentDefault (valor 16) y luego cierra el documento. El script se ejecuta completamente en segundo plano y no interfiere con su otro trabajo.
Requisitos previos para este método:
- Word instalado en el equipo (cualquier edición desde 2007 en adelante funciona).
- PowerShell 5.0 o posterior, incluido con Windows 10 y Windows 11.
- Permisos de escritura en la carpeta donde residen los archivos .doc. El script guarda los archivos .docx en la misma carpeta.
- Los archivos .doc originales no deben estar protegidos con contraseña ni dañados. El script omite los archivos que provocan errores.
Pasos para convertir archivos .doc a .docx en masa
Siga estos pasos exactamente. El script procesa todos los archivos .doc de la carpeta que especifique. No modifica los archivos originales a menos que agregue el paso de eliminación al final.
- Abra PowerShell como administrador
Haga clic en el botón Inicio, escriba PowerShell, haga clic con el botón derecho en Windows PowerShell en los resultados y seleccione Ejecutar como administrador. Confirme el aviso de Control de cuentas de usuario. Ejecutar como administrador garantiza que el script pueda acceder a todas las carpetas sin errores de permisos. - Establezca la política de ejecución para permitir scripts (si es necesario)
PowerShell puede bloquear la ejecución de scripts de forma predeterminada. Escriba el siguiente comando y presione Entrar:Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Este cambio se aplica solo a la sesión actual de PowerShell. Permite que el script se ejecute una vez sin alterar la política de todo el sistema. - Copie el script de conversión en PowerShell
Copie el siguiente bloque de script y péguelo en la ventana de PowerShell haciendo clic con el botón derecho en la barra de título de la ventana y seleccionando Editar > Pegar. ReemplaceC:\Path\To\Your\Foldercon la ruta real de la carpeta que contiene sus archivos .doc.$folderPath = "C:\Path\To\Your\Folder" $wordApp = New-Object -ComObject Word.Application $wordApp.Visible = $false Get-ChildItem -Path $folderPath -Filter doc -Recurse | ForEach-Object { $docPath = $_.FullName $docxPath = [System.IO.Path]::ChangeExtension($docPath, ".docx") try { $doc = $wordApp.Documents.Open($docPath) $doc.SaveAs2([ref] $docxPath, [ref] 16) $doc.Close() Write-Host "Converted: $docPath" } catch { Write-Host "Failed: $docPath - $_" } } $wordApp.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($wordApp) | Out-Null - Ejecute el script
Presione Entrar para ejecutar el script. PowerShell procesa cada archivo .doc en la carpeta especificada y todas las subcarpetas. Aparece un mensaje de progreso para cada archivo: Converted: C:\Docs\report.doc si tuvo éxito, o Failed: C:\Docs\old.doc – mensaje de error para cualquier archivo que no se pudo abrir. - Verifique los archivos .docx convertidos
Abra la carpeta en el Explorador de archivos. Debería ver un archivo .docx junto a cada archivo .doc original. Abra algunos archivos .docx en Word para confirmar que el contenido, el formato y las imágenes estén intactos. El script conserva el nombre de archivo original y solo cambia la extensión. - Elimine los archivos .doc originales (opcional)
Si está seguro de que las conversiones son correctas, puede eliminar los archivos .doc antiguos. Agregue esta línea antes de$wordApp.Quit()en el script:Remove-Item -Path $docPath -Force
Ejecute el script de nuevo en la misma carpeta. La eliminación es permanente y omite la Papelera de reciclaje, así que pruebe el script en una copia de respaldo primero.
Problemas comunes y cómo resolverlos
El script se ejecuta pero no aparecen archivos .docx en la carpeta
Esto ocurre cuando la ruta de la carpeta en el script apunta a una ubicación que no contiene archivos .doc. Verifique que la variable $folderPath use la ruta completa correcta. La ruta no debe incluir espacios finales ni comillas dentro de la cadena. Ejecute Get-ChildItem -Path $folderPath -Filter doc en PowerShell para enumerar todos los archivos .doc antes de ejecutar el script de conversión.
Word se abre y se cierra repetidamente durante el script
El script establece $wordApp.Visible = $false para ocultar la ventana de Word. Si Word aún aparece, puede haber otro proceso interfiriendo. Cierre todos los documentos de Word abiertos antes de ejecutar el script. Si el problema persiste, reinicie Windows para limpiar los objetos COM bloqueados.
Error: “Cannot open document” para un archivo específico
El archivo .doc puede estar dañado, protegido con contraseña o guardado en un formato que Word no puede leer. Abra ese archivo directamente en Word. Si Word no puede abrirlo, el archivo no se puede recuperar mediante automatización. Si el archivo está protegido con contraseña, debe quitar la contraseña manualmente antes de que el script pueda convertirlo.
PowerShell devuelve “Object not set to an instance of an object”
Este error ocurre cuando falla el comando New-Object -ComObject Word.Application. Es posible que Word no esté instalado o que el registro COM esté dañado. Reinstale Word o ejecute Repair desde el programa de instalación de Office en Panel de control > Programas > Microsoft Office > Cambiar > Reparación rápida.
Script de PowerShell frente a conversión manual en Word
| Elemento | Script de PowerShell | Conversión manual (Word) |
|---|---|---|
| Tiempo para 100 archivos | 5–10 minutos (sin supervisión) | 60–90 minutos (activo) |
| Interacción del usuario requerida | Ninguna después de iniciar el script | Abrir, Guardar como, seleccionar formato, cerrar por archivo |
| Riesgo de error humano | Bajo (salida consistente) | Alto (omitir archivos, formato incorrecto) |
| Compatibilidad con subcarpetas | Sí, con el parámetro -Recurse | No, debe navegar manualmente |
| Nivel de habilidad requerido | Intermedio (conocimientos básicos de PowerShell) | Principiante |
El script de PowerShell es el método más rápido y confiable para convertir muchos archivos .doc. La conversión manual solo es adecuada para uno o dos archivos.
Ahora puede convertir toda una carpeta de archivos .doc heredados al formato moderno .docx sin abrir cada archivo manualmente. Pruebe el script en una copia de respaldo de sus archivos antes de ejecutarlo en su archivo principal. Para una capa adicional de seguridad, agregue el parámetro -WhatIf al comando Remove-Item para previsualizar qué archivos se eliminarían sin eliminarlos realmente.