Dateien nachträglich konvertieren?

ich würde gerne eine Großaktion starten, mit den von Dir beschriebenen Kommandozeilen.
Leider passiert aber beim Versuch (Doppelklick auf die Datei convert.cmd) nichts, außer dem kurzen Aufblenden eines schwarzen Fensters, in dem einige Befehle ablaufen. Läuft zu schnell, um Genaues zu erkennen.
Jedenfalls befindet sich im Ordner der Ausführung keine konvertierte .ods-Datei. Das war doch der Sinn der Übung. Kann es sein, dass sich der Aufbau der Befehle ändert, weil ich mit der Version LibreOffice6.3 mit 64 bis arbeite? Ich gebe die Dateiinhalte hier zur Prüfung wider:

  1. Datei ‘loconvert_ods.cmd’: “C:\Program Files\LibreOffice\program\soffice.exe” --convert-to ods %1
  2. Datei ‘convert.cmd’: Forfiles /P “%cd%” /M *.xlsx /C “cmd /c %cd%\loconvert_ods.cmd @file

Vielleicht gibt es einen einfachen Formatfehler?

Sieht eigentlich gut aus. 2 Dateien, Pfad soffice.exe entspricht Deinem 64-Bit Windows 10, da hätte ich nur die Idee, dass es sich bei Deinen Dateien vielleicht nicht um .xlsx, sondern um .xls handelt oder dass die beiden cmd-Dateien nicht im selben Ordner mit den zu konvertierenden Dateien stehen?

Wenn Du sehen willst, welche Ausgaben das Script liefert, müsste es manuel in einer Konsole gestartet werden. Win + R, cmd, Enter, mit cd <Verzeichnisname> zu einem Verzeichnis mit den zu konvertierenden Dateien hangeln, convert.cmd, Enter.

Also Leute - seid mir bitte nicht böse, aber das ist doch Blödsinn ein Shellscript per Doppelklick zu starten und so jeden Fehler unsichtbar zu machen dem man sonst im Kommandfenster hätte.

@anon73440385 , ich schätze Deine Beiträge sehr, aber etwas konstruktiver könnte es hier schon sein. Sich komplett manuell auf der Konsole durch die Verzeichnisse zu hangeln kann es mMn nicht sein, falls Du das damit zum Ausdruck bringen wolltest. Da bietet sich der Start durch einen Doppel-Klick nun mal an. Das Script macht im Zweifel nichts, kann keinen Schaden anrichten und normalerweise sind die konvertierten Dateien am Ende einfach da. Ich hatte ja schon angedeutet, dass nicht aller denkbarer Komfort da drin steckt.

Im konstruktiven Sinne hier eine Ergänzung: in der ‘convert.cmd’ noch eine Zeile mit pause anfügen und das Fenster bleibt offen, wartend auf einen Tastendruck, so dass man die Ausgabe sehen kann. Damit ist die Beschreibung zum manuellen Debuggen aus meinem vorhergehenden Kommentar obsolet. Ok?

Ich rede nicht davon, sich auf der Kommandozeile durch Verzeichnisse zu hangeln sondern davon, auf der Kommdozeile Skripte zu starten um Fehler zu sehen, was ja jetzt auch offensichtlich erfolgt ist. Und was an dem mittelbaren Ratschlag das Kommando doch unter einer Eingabeaufforderung zu testen, unkonstruktiv sein soll, sehe ich nicht ganz. Sei doch ehrlich - Dich stört das Wort Blödsinn (und da habe ich schon mal vorab gebeten mir nicht böse zu sein) - was ich hier natürlich gerne wiederhole.

Guten Morgen,

ich habe den Fehler jetzt sichtbar gemacht. Siehe

Könnte es ein, dass es an dem Verzeichnisnamen Eigene Dateien (mit Leerzeichen in der Mitte) liegt?

Aber wie ändert man das in den cmd-Dateien?

Ah, verstehe. Die Idee, die ‘loconvert_ods.cmd’ in einen Pfad ohne Leerstellen zu legen, war gut. Bitte ändere die ‘convert.cmd’ wie folgt (beachte ‘@path’ am Ende):

Forfiles /P "%cd%" /M *.xlsx /C "cmd /c C:\Users\Jürgen\loconvert_ods.cmd @path"

Oder lass das zweite %cd% in der ursprünglichen Zeile weg, dann aber ‘loconvert_ods.cmd’ mit in das Verzeichnis stellen:

Forfiles /P "%cd%" /M *.xlsx /C "cmd /c loconvert_ods.cmd @file"

Das läuft bei mir beides mit den gleichen Pfaden wie bei Dir durch (trotz Leerstellen im Pfad).

Danke! Ein anderer Fehler tritt jetzt etwas später auf :wink: Siehe unten:

Nun scheint er ein Problem mit meinem Vornamen (der ein “ü” enthält) zu haben.
Bin wiedermal ratlos. Aber anscheinend nicht ohne Helfer :-))

Hab im Moment keine Idee, was Microsoft da verbrochen hat. Kann es aber hier nachvollziehen. Dann nimm bitte die andere Variante, in der beide cmd-Dateien im fraglichen Verzeichnis untergebracht werden. Die kommt an der kritischen Stelle ohne die Auswertung des Pfades aus und bleibt somit auch nicht an äöüß und Leerstellen hängen.

Also, Windows stellt sich selbst ein Bein. (Wen es interessiert: wird die cmd-Datei mittels notepad erstellt, bekommt die Datei fix die Codepage 1250 zugewiesen. Und die lässt sich im Kontext Forfiles nicht mit der DOS Codepage 850 zusammenbringen. Echt schräg.) Wie gesagt, nutze bitte Variante 2 Forfiles /P "%cd%" /M *.xlsx /C "cmd /c loconvert_ods.cmd @file", wo beide cmd-Dateien im zu konvertierenden Verzeichnis liegen. Mit Dateinamen, die äöüß enthalten, funktioniert es.

Volltreffer! Jetzt geht es einwandfrei. Vielen Dank dafür!
Leider hätte ich noch ein paar Bedarfe:

  1. ich würde gerne nach der erfolgten Konvertierung mit einem zusätzlichen Befehl die konvertierten MS-Office-Dateien in dem Verzeichnis löschen. Da ich bereits alle MS-Office-Dateien extern gesichert habe, wäre das kein Risiko oder Verlust.
  2. Kennwortgeschützte Dateien können so nicht konvertiert werden.
    Und die Eingabeaufforderung zeigt auch keinen Fehler an. Das Skript läuft einfach durch. Insofern wäre es ungut, wenn alle MS-Office-Dateien im Verzeichnis gelöscht würden.
    Entweder, die Dateien mit Kennwort müssten bleiben, oder ich brauchte irgendeinen Hinweis, dass Dateien nicht konvertiert wurden.
  3. Die konvertierten Dateien erhalten alle Datum und Zeit der Konvertierung. Ist es möglich, die MS-Office-Zeiten beizubehalten?
    Ich hoffe, ich überstrapaziere nicht die Hilfsbereitschaft oder Geduld. In jedem Falle schon jetzt großes Dankeschön an alle Beteiligten und schönen Sonntag!

Freut mich, dass wir am Ende eine Lösung haben. Zu Deinen Fragen, die eigentlich nicht mehr LO-bezogen sind, nur ein paar Hinweise: Die Such- und Sortierfunktionen vom Windows-Explorer sollten das für Dich lösen können. Suche nach *.xlsx ODER *.ods sollte eine Liste aller Dateien liefern, Klick auf die Spalte Name sortiert die xlsx und ods hintereinander - da wo nur eine xlsx auftaucht, hast Du es mit einer Deiner kennwortgeschützten Dateien zu tun. Löschen aller *.xlsx geht dann ähnlich, halt nur *.xlsx suchen und die Trefferliste markieren, löschen. Natürlich kannst Du auch die kennwortgeschützten Datein konvertieren, nicht mit dem Script, aber nach wie vor manuell. Auch mit Calc bleibt der Kennwortschutz hinterher. Das Datum der konvertierten Dateien ist das Konvertierungsdatum, weil es sich dabei um neue Dateien handelt. Also: no Chance. Benenne halt für die Zukunft Deine Dateien einschließlich eines Datums á là ‘xxxx_20191006.ods’ um damit zukünftig diese Info zu erhalten.

Vielen Dank nochmals!

Dann fasse ich noch mal zusammen.

@anon73440385 , danke für den Ansatz, eine Konvertierung über die Konsole zu automatisieren.

jnanon@arcor.de , ich denke, diese ‘Anfangsentscheidung’ ist dahingehend geklärt, dass der Installationsassistent LibreOffice für alle Microsoft Office Dokumente zuständig macht. Kann man rückgängig machen, ist aber auf einem PC nur mit LO weder nützlich noch erforderlich, um zukünftig in erster Linie mit ODF-Dateien zu arbeiten. Auf das Handling von Dateien ‘aus zwei Welten’ ist Opaque schon einmal mehr ausführlich eingegangen.

Da es im Sinne der Fragestellung keinen Automatismus in LO gibt, ist eine mögliche Lösung die Konvertierung aller Microsoft Office Dokumente mit Hilfe eines Scriptes abseits von LO, in dem LibreOffice auf der Kommandozeile mit entsprechenden Parametern aufgerufen wird. (Um nicht jede Datei einzeln manuell öffnen und mit ‘Speichern unter’ als konvertierte ODF-Datei ablegen zu müssen.)

Wenn man dies verzeichnisweise angehen möchte, folgt hier eine mögliche Lösung:

Das Hauptscript (convert.cmd):

Forfiles /P "%cd%" /M *.xlsx /C "cmd /c loconvert_ods.cmd @file"
Forfiles /P "%cd%" /M *.xls /C "cmd /c loconvert_ods.cmd @file"
Forfiles /P "%cd%" /M *.docx /C "cmd /c loconvert_odt.cmd @file"
Forfiles /P "%cd%" /M *.doc /C "cmd /c loconvert_odt.cmd @file"
Forfiles /P "%cd%" /M *.pptx /C "cmd /c loconvert_odp.cmd @file"
Forfiles /P "%cd%" /M *.ppt /C "cmd /c loconvert_odp.cmd @file"
REM pause

Hilfsscripte:
(loconvert_ods.cmd)

"C:\Program Files (x86)\LibreOffice\program\soffice.exe" --convert-to ods %1

(loconvert_odt.cmd)

"C:\Program Files (x86)\LibreOffice\program\soffice.exe" --convert-to odt %1

(loconvert_odp.cmd)

"C:\Program Files (x86)\LibreOffice\program\soffice.exe" --convert-to odp %1

Es stecken ein paar Annahmen drin. Kennwortgeschützte Dateien können so nicht konvertiert werden. Das Script geht über diese Dateien schlicht hinweg. Solche Dateien müssen manuell konvertiert werden. Es gibt kein Log von den Scriptaktivitäten. Ebenso werden keine Rückgabewerte ausgewertet. Das Ergebnis muss also selbst geprüft werden.

Windows hat Probleme in einem Konsolenfenster (aka DOS-Box), mit Leerzeichen sowie Umlauten (allgemeiner: Sonderzeichen) in Pfaden und Dateinamen umzugehen. Deshalb funktioniert das ganze nur, wenn die cmd-Scripte in das zu konvertierende Verzeichnis gestellt und dort gestartet werden. Falls es nicht wie gewünscht läuft, kann man das ‘REM’ vor pause entfernen und die Ausgabe prüfen.

Das Dateidatum der zu konvertierenden Datei bleibt nicht erhalten, da die konvertierte Datei eine neue, in dem Moment erstellte Datei ist.

Alle ursprünglichen Microsoft Office Dateien bleiben unverändert erhalten. Sicherung, Archivierung, Bereinigung usw. müssen dann auf anderem Wege erledigt werden.

Wer nur bestimmte MS Office-Dokumenttypen konvertieren möchte, müsste die entsprechenden Zeilen im Hauptscript belassen und den Rest auskommentieren (REM davor setzen) oder löschen.

Dieses Set ist auf Windows 32/64 Bit und LibreOffice 32 Bit ausgerichtet. Der Pfad “C:\Program Files (x86)\LibreOffice\program\soffice.exe” lautet ansonsten für das 64-Bit LO “C:\Program Files\LibreOffice\program\soffice.exe”.

Testweise sieht das Ergebnis so aus:

Cookievore

jnanon@arcor.de Bitte markiere diese Antwort als die korrekte. @Cookievore hat Dir hier geholfen und daher gebühren ihm auch die Karmapunkte,

Es geht viel einfacher, als mit einem komplizierten Skript!

Im Menü unter “Datei” > “Assistenten” > “Dokument-Konverter” findet man alles, was man braucht. Da kann man Office Dokumente ganz einfach per Assistent konvertieren und das auch noch über alle Unterverzeichnisse hinweg. Es geht für Word, Excel und Powerpoint Dateien sowie deren Templates.

Man kann also ein relativ “hohes Verzeichnis” eingaben, also am Anfang der Ordnerstruktur und der Assistent geht alle darunter liegenden Verzeichnisse durch und konvertiert ins Libre-Format.

Ohne Batch, ohne alles - ganz einfach!

Hallo - sehr guter Hinweis, allerdings muss man dann auch auf diese Seite verweisen. Da gibt es eine Einschränkung auf die alten MS Office Dokument-Formate (.doc, .xls, .ppt) und OP spricht in der Frage explizit von .xlsx.

Danke für die Klärung, die Einschränkung auf das alte Format hatte ich tatsächlich übersehen!

Funktioniert aber inzwischen auch mit xlsx, docx und pptx, steht nur (noch) nicht in der Doku. Vorhin probiert. Nur die versprochene Log-Datei klappt nicht. Man könnte noch einwenden, dass es nicht selektiv für alt / neu ist. Wenn Word spezifiziert wird, dann gleich doc und docx zusammen. Den Assistenten kannte ich nicht (logisch, sonst hätte ich mir die Mühe mit dem Script nicht gemacht). Danke auch von mir für den Hinweis.

Bei mir hat auch die Log-Datei funktioniert. Man kann es im Dialog wählen oder abwählen.
Dateien mit Kennworten werden auch hier ohne Hinweis übergangen. Aber sie werden im Logfile auch nicht als konvertiert gelistet. Auch ich bedanke mich für den Hinweis auf den Assistenzen. Diese Lösung ist natürlich bei weitem angenehmer.