Faq/General/150/da

OBS
Vi behandler konvertering af .docx til .odt, men syntaksen og trinnene er de samme for andre formater, der understøttes af LibreOffice.

Kontekst
Under MS-Windows 10 kan vi bruge en kommando som soffice.exe --convert-to odt my_document.docx for at konvertere my_document.docx fra MS .docx-formatet til Open Document Format (odt). Funktionen --convert-to lader os specificere et sæt dokumenter ved at bruge den generelle joker-syntaks for filer. Der er for eksempel tilladt at bruge *.docx, når du har en bunke .docx-files til konvertering i den aktuelle mappe.

Problem
Men når den bruges i Windows Kommando-skal, fungerer det overhovedet ikke. Det ser ud til at alle konverteringerne begynder samtidig, og da to eksemplarer af LibreOffice (soffice.exe) ikke kan køre på samme tid, når de startes fra kommandolinjen, afsluttes processen aldrig. I bedste fald får du til sidst en eller to filer konverteret, men du vil i hvert fald manuelt skulle "myrde" en bunke LibreOffice-processer, der hænger i systemet (ved første blik: dobbelt så mange som filerne).

Løsning
Den enkle måde at takle dette på, er at bruge det nye Windows-undersystem til Linux-miljøet, som MS leverer til sin version 10 af Windows. Du skal måske installere den, men det er ligetil, hvis du følger dokumentationen |her.

Når du har gjort det, skal du tilgår en ret fin Bash-skal, der kører ovenpå det basale Windows-system, og funktionen "–convert-to" fungerer korrekt i synkron tilstand.

Den korte udgave

 * 1) Identificer stien til soffice.exe.
 * 2) cd til mapper med filer, der skal konverteres, efter at du har oprettet en mål-mappe.
 * 3) Giv denne kommando:  --convert-to odt --outdir  *.docx

Eksempel:
"/mnt/c/Program Files/LibreOffice 5/program/soffice.exe" --convert-to odt --outdir ./Converted_To_odt *.docx vil konvertere .docx-filerne i den aktuelle mappe til deres .odt-navnefælle i undermappen "./Converted_To_odt".

Hvorfor?
WSL (Windows Subsystem for Linux) opretter sit eget komplette filsystem. Derfor er syntaksen til at angive en fil-placering i mappe-træet forskellig fra Windows. Den første forskel er roden: Under Windows plejer det at være C:\, modsvaret i Bach-skallen er /mnt/c/. Dernæst er mappe-skilletegnet under Windows \, i Bash er det / (som i Unix). I øvrigt er reglerne de samme; Bash-skallen understøtter de samme tegnsæt som Windows' kommandoskal såvel som lange filnavne og filnavne med mellemrum, hvis de er afgrænset af dobbelte anførselstegn (").

Hvordan oprettes kommandoen?
Det letteste er at undersøge den genvej, du bruger hver gang du starter LibreOffice. Højreklik på den, dernæst på "Egenskaber", kopier så indholdet i feltet "Mål". I det eksempel vi gav, er det "C:\Program Files\LibreOffice 5\program\soffice.exe". Når du tilpasser syntaksen til Bash-kravene, som beskrevet ovenfor, får du: "/mnt/c/Program Files/LibreOffice 5/program/soffice.exe" Pas på, Unix er versalfølsom, det er Windows ikke.

Og så er du forresten færdig.

Konklusion
Bash-skallen oven på Windows er en let måde at konvertere en bunke filer fra et format til et andet med LibreOffices indbyggede kommando-linje funktion. Den arbejder stille.

Eller allerenklest: interaktivt
Det er endnu lettere at bruge den indbyggede LibreOffice Dokumentkonverterings-guide, som beskrevet her: https://help.libreoffice.org/latest/en-US/text/shared/autopi/01130000.html.

Du kan starte den ved at klikke på menuen Filer - Guider - Dokumentkonvertering...

En bruger har rapporteret, han var nødt til dele filerne op i bundter på 200 stk., fordi processen indimellem kørte galt.

The long description of the problem
The problem is not that "all the conversions are started simultaneously". It's simply that LibreOffice's  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, the command is first analyzed by Bash, and it finds the   there, and enumerates every file that matches the mask, puts their names into one string, and substitutes the   with something like. This is what LibreOffice sees.

Windows' cmd.exe does not do that, and sends the  to LibreOffice unmodified. LibreOffice simply tries to open the file named, 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.