Using the --convert-to command-line function to convert formats under Windows 10

From The Document Foundation Wiki
< Faq‎ | General
Jump to: navigation, search
This page is a translated version of the page Faq/General/150 and the translation is 93% complete.

Other languages:
čeština • ‎dansk • ‎English • ‎français • ‎italiano • ‎한국어

Poznámka

V textu budeme uvažovat o převodu z .docx do .odt, ale syntaxe a kroky jsou stejné i pro další formáty, které LibreOffice podporuje.


Kontext

V MS Windows 10 můžeme použít příkaz soffice.exe --convert-to odt my_document.docx pro provedení převodu "my_document.docx" z formátu MS docx do formátu Open Document (odt). Funkce "--convert-to" umožňuje specifikovat množinu dokumentů s použitím zástupných znaků pro soubory. Například je možné použít *.docx, když máte balík souborů .docx, které chcete převést. Tyto soubory musí být v jedné složce.


Problém

Když však tento příkaz použijete v příkazovém řádku Windows, vůbec nefunguje. Zdá se, že všechny převody jsou spuštěny současně a protože dvě instance LibreOffice (soffice.exe) nemohou při spuštění z příkazového řádku běžet současně, proces nikdy neskončí. V nejlepším případě budete mít jeden nebo dva převedené soubory, ale v každém případě budete muset manuálně ukončit balík procesů LibreOffice, které budou v systému spuštěny (na první pohled bude procesů dvakrát tolik než je souborů).


Řešení

Pro překonání tohoto problému je jednoduché řešení použití nového subsystému Windows pro Linux Environment, který je poskytnutý MS pro Windows 10. Možná budete muset tento subsystém nainstalovat, což je celkem jednoduché, pokud budete postupovat podle dokumentace na stránce https://docs.microsoft.com/en-us/windows/wsl/install-win10.


Po instalaci budete mít přístup k docela pěknému příkazovému řádku běžícímu nad základním systémem Windows a funkce "--convert-to" bude bez problémů pracovat v synchronním módu.


Krátká ukázka

  1. Zjistěte si cestu k souboru soffice.exe.
  2. Po vytvoření cílového adresáře přejděte do adresáře, který obsahuje soubory k převodu.
  3. Zadejte tento příkaz: <cesta k soffice.exe> --convert-to.odt -outdir <cilovy_adresar>*.docx.


Příklad

"/mnt/c/Program Files/LibreOffice 5/program/soffice.exe" --convert-to odt --outdir ./Converted_To_odt *.docx převede soubory docx z aktuálního adresáře do souborů odt do adresáře ./Converted_To_odt.


Proč?

WSL připojuje celý souborový systém sám. Syntaxe pro určení umístění souboru v adresářovém stromu se tedy liší od syntaxe systému Windows. První rozdíl je kořen adresářového stromu: Ve Windows je to C:\, ekvivalentem v bashi (bash = příkazový řádek Linuxu) je /mnt/c. Dalším rozdílem je oddělovač adresářů - ve Windows je to \, v bashi je to /. Zbývající prvidla jsou již stejná - bash podporuje stejnou znakovou sadu jako příkazový řádek Windows, podporuje i dlouhá jména souborů a jména souborů s mezerami, pokud jsou oddělovány uvozovkami (").


Jak vytvořit příkaz?

Nejjednodušší způsob je prozkoumat zástupce, kterého používáte při spouštění LibreOffice. Pravým tlačítkem na něj kliknete, z kontextové nabídky vyberete "Vlastnosti" a následně zkopírujete obsah pole "Cíl". V ukázce výše to bude "C:\Program Files\LibreOffice 5\program\soffice.exe". Poté upravte syntaxi podle pravidel bashe, jak je popsáno výše, a dostanete toto: "/mnt/c/Program Files/LibreOffice 5/program/soffice.exe" Pozor! Unix (Linux) rozlišuje velká a malá písmena, Windows ne.


A je hotovo.


Závěr

Použití příkazové řádky bash ve Windows je snadný způsob, jak převést spoustu souborů z jednoho formátu do jiného, pomocí vestavěné funkce příkazového řádku LibreOffice.


Nebo jednodušší způsob - interaktivní

LibreOffice umožňuje i jednodušší způsob konverze dokumentů - vestavěný konvertor dokumentů, jak je popsáno zde: https://help.libreoffice.org/latest/cs/text/shared/autopi/01130000.html


Můžete jej spustit z menu Soubory ▸ Průvodci ▸ Konvertor dokumentů...


Někteří uživatelé hlásili, že museli rozděli soubory do balíků po 200 souborech, protože převod více souborů někdy neproběhl v pořádku.

Or the actual description

The problem is not "all the conversions are started simultaneously" and everything. It's simply that LibreOffice's --convert-to in fact does not support using wildcards itself, and only works on non-Windows systems because they process the wildcards in their shells (and of course, these shells also work on Windows, like with Cygwin or WSL).

What does this mean? This means that in Bash, when you send a command like soffice --convert-to odt path/to/*.doc, the command is first analyzed by Bash, and it finds the path/to/*.doc there, and enumerates every file that matches the mask, puts their names into one string, and substitutes the path/to/*.doc with something like path/to/1.doc path/to/2.doc path/to/345.doc. This is what LibreOffice sees.

Windows' cmd.exe does not do that, and sends the path/to/*.doc to LibreOffice unmodified. LibreOffice simply tries to open the file named *.doc, and fails. That's all.

In Windows' cmd.exe, the pre-processing should be done explicitly, like this:

  for %f in ("path\to\*.doc") do "C:\Program Files\LibreOffice\program\soffice" --convert-to odt "%f"

The enhancement request to implement own wildcard processing is tdf#48413.