Faq/General/150/da

From The Document Foundation Wiki
< Faq‎ | General
Jump to navigation Jump to search
This page is a translated version of the page Faq/General/150 and the translation is 100% complete.
Other languages:
English • ‎Nederlands • ‎dansk • ‎español • ‎français • ‎italiano • ‎čeština • ‎한국어

Bemærk

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 Windows-undersystem til Linux-miljøet (WSL), som Microsoft leverer til sin version 10 af Windows. Du skal måske installere det først, hvilket er ligetil, hvis du følger WSL-dokumentationen.


Når du har gjort det, skal du tilgå 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: <sti til soffice.exe> --convert-to odt --outdir <min_output_mappe> *.docx


Eksempel:

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


Hvorfor denne syntaks?

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 Bash-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 Dokumentkonverteringassistent


Du kan starte den ved at navigere i menuerne Template:Filer


Bemærk, at en bruger tidligere har rapporteret, han var nødt til dele sine filerne op i bundter på 200 stk., fordi processen indimellem kørte galt.

Den lange beskrivelse af problemet

Problemet er ikke, at "alle konverteringerne bliver startet samtidig. Det er simpelthen, at LibreOffice's --convert-to selv faktisk ikke understøtter brugen af jokere og kun fungerer på ikke-Windowssystemer, fordi de arbejder med jokerne i deres skaller (og fordi disse skaller naturligvis også fungerer under Windows ligesom med Cygwin eller WSL).


Hvad betyder det? Det betyder, at når du i Bash sender ern kommando som soffice --convert-to odt path/to/*.doc, anlyseres kommandoen først af Bash, og den finder path/to/*.doc dér, og opregner hver fil, der matcher masken, sætter deres navne ind i én streng og erstatter path/to/*.doc med noget som ligner path/to/1.doc path/to/2.doc path/to/345.doc. Dette er, hvad LibreOffice ser.

Windows' cmd.exe udfører det ikke og sender path/to/*.doc uændret til LibreOffice. LibreOffice forsøger simpelthen at åbne filen ved navn *.doc - od det mislykkes. Det er alt.

In Windows' cmd.exe, burde forhåndsudførelsen ske udførligt, på denne måde:

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

Anmodningen om forbedring til implementering af egen joker-behandling er tdf#48413.