Faq/General/150/es
TDF LibreOffice en español Document Liberation Project Blogs comunitarios Weblate Nextcloud Redmine Preguntas y respuestas Donar
Uso de la función --convert-to en Windows10
Nota
Consideraremos la conversión de .docx a .odt, pero la sintaxis y los pasos son los mismos para otros formatos que puede gestionar LibreOffice.
Contexto
En MS-Windows 10 podemos usar un comando como soffice.exe --convert-to odt mi_documento.docx
para convertir mi_documento.docx del formato MS docx al formato de open document (odt).
La función --convert-to
debería permitir especificar un conjunto de documentos utilizando la sintaxis general de comodines para archivos. Por ejemplo, usando *.docx
cuando tiene varios archivos .docx que quiere convertir en un determinado directorio.
Problema
Pero con el intérprete de comandos de Windows, no funciona correctamente. Parece que todas las conversiones se inician simultáneamente, y dado que dos instancias de LibreOffice (soffice.exe) no pueden ejecutarse al mismo tiempo cuando se inician desde la línea de comandos, el proceso nunca terminará. En el mejor de los casos, terminará con uno o dos archivos convertidos, pero en cualquier caso, tendrá que eliminar manualmente un montón de procesos de LibreOffice abiertos en el sistema (el doble de la cantidad de archivos encontrados, a primera vista).
Solución
Para solventar esto, una forma sencilla es utilizar el nuevo Subsistema de Windows para el entorno Linux (WSL) proporcionado por MS para su versión 10 de Windows. Puede que tenga que instalarlo, lo que es bastante sencillo si sigue la documentación de https://docs.microsoft.com/es-es/windows/wsl/install .
Una vez hecho esto, tendrá acceso a un un intérprete de comandos bash que se ejecuta por encima del sistema base de Windows, y la función --convert-to funcionará correctamente, en modo síncrono.
Usando el Intérprete de comandos
- Identifique la ruta a soffice.exe.
- cambie al directorio que contiene los archivos a convertir, después de haber creado un directorio de destino.
- Ingrese este comando:
<ruta a soffice.exe> --convert-to odt --outdir <directorio_de_salida> * .docx
Ejemplo:
"/mnt/c/Archivos de Programa/LibreOffice5/program/ soffice.exe" --convert-to odt --outdir ./Convertidos_a_odt * .docx"
Convertirá los archivos .docx del directorio actual a su equivalente .odt en el subdirectorio ./Convertidos_a_odt
.
¿Por qué esta sintaxis?
WSL monta un sistema de archivos completo por sí solo. La sintaxis para especificar una ubicación de archivo en el árbol de directorios es diferente a la de Windows. La primera diferencia es el punto raíz: bajo Windows suele ser C:\
, el equivalente en el shell bash es /mnt/c/
. El separador de directorios en Windows es \, en bash es el de Unix /. Por lo demás, las reglas son las mismas, el intérprete de comandos bash admite el mismo conjunto de caracteres que el intérprete de comandos de Windows, También los nombres de archivo largos o nombres de archivo con espacios, siempre tienen que estar delimitados por comillas dobles (").
¿Cómo componer el comando?
La forma más sencilla es examinar el acceso directo que utiliza cada vez que inicia LibreOffice:
Haga clic derecho en él, luego en "Propiedades", y luego copie el contenido del campo "Destino". En el ejemplo dado, será "C:\Archivos de programa\LibreOffice5\program\soffice.exe"
.
Luego, ajuste la sintaxis a los requisitos de bash como se describió anteriormente, para obtener: "/mnt/c/Archivos de Programa/LibreOffice5/program/soffice.exe"
.
Cuidado, Unix distingue entre mayúsculas y minúsculas, Windows no.
Con eso bastará.
Conclusión
Usar el shell bash en Windows es una manera fácil de convertir un lote de archivos de un formato a otro usando la función de línea de comandos incorporada de LibreOffice. Funciona silenciosamente.
La forma más sencilla, interactiva
Es incluso más sencillo utilizar el Asistente de conversión de documentos de LibreOffice incorporado
Puede iniciarlo haciendo clic en el menú ▸ ▸
Algún usuario ha informado que tuvo que fraccionar su lote de archivos en grupos de 200 porque el proceso fallaba a veces.
La descripción real del problema
El problema no es que "todas las conversiones se inicien simultáneamente". Es simplemente que --convert-to
de LibreOffice de hecho no admite el uso de comodines, y no funciona con el intérprete de comandos (cmd.exe) de Windows porque a diferencia de este intérprete de comandos, los intérpretes de comandos de otros sistemas procesan los comodines dentro del mismo intérprete (de hecho, otros intérpretes que funcionan en Windows como Cygwin o WSL los procesan correctamente).
¿Qué significa esto? Esto significa que Bash (intérprete WLS), cuando envía un comando como soffice --convert-to odt path/to/*. Doc
, primero analiza el comando y encuentra la ruta /to/*.doc
enumera todos los archivos que coinciden con la máscara, pone sus nombres en una cadena y sustituye la ruta de /a/*.doc
con algo como ruta/a/1.doc ruta/a/2.doc ruta/a/345.doc
. y Esto es lo que traslada a LibreOffice.
El cmd.exe de Windows no hace eso y envía la ruta/a/*.Doc
a LibreOffice sin modificarla. LibreOffice simplemente intenta abrir el archivo llamado *.doc
y falla
En cmd.exe de Windows, el preprocesamiento debe realizarse explícitamente, de la siguiente manera:
for %f in ("path\to\*.doc") do "C:\Program Files\LibreOffice\program\soffice" --convert-to odt "%f"
La solicitud de mejora para implementar el propio procesamiento de comodines es tdf#48413.