
[Gelöst] Erstellte .cmd Datei wird nicht immer ausgeführt
[Gelöst] Erstellte .cmd Datei wird nicht immer ausgeführt
Hatte erste Beiträge gemacht.
viewtopic.php?f=6&t=42230
Re: Erstellte .cmd Datei wird nicht ausgeführt
Beitrag von Nübby » Sa 26. Sep 2026, 19:59
Ja, das übliche gefrickel mit Basic. Allerdings in recht komplexer Form. Die Tabelle enthält über 10.000 Einträge die über Macros verwaltet werden. Die Datei ist für meine Fotos, Tieraufnahmen gemacht incl. Taxonomie und Metadaten einlesen (über ExifTool) und im Laufe der Jahre gewachsen. Der Grundcode zum erstellen und aufrufen der cmd ist im Original in
Sub aufruf_x(ereignis) ab Zeile 820 und sieht gekürzt so aus:
'...
tmpordner=Environ("TEMP"): if tmpordner="" then tmpordner=Environ("TMP")
tmpordner=tmpordner+"\"
mycell = mysheet1.getCellByPosition(7,zeile): name1=mycell.string `Pfad
mycell = mysheet1.getCellByPosition(2,zeile): name2=mycell.string 'Name
mycell = mysheet1.getCellByPosition(3,zeile): name3=mycell.string 'erw
dname=tmpordner+"aufruf.cmd" :
inh="@Echo off"+chr$(13)+"chcp 1252 >nul"+chr$(13)+chr$(34)+name1+name2+name3+chr$(34)
num3=freefile
open dname for output as #num3
print #num3,inh
close #num3
Shell (dname,4)
'....
mysheet1 ist natürlich vorher definiert. Bevor weitere Nachfragen nach Code kommen - Die komplette Datei ist sehr komplex und beinhaltet U.a. Betriebsystem (Windows/Linux) und Programm (OpenOff/LibreOff) abfragen. Unter Linux habe ich große Probleme mit einigen Befehlen, was aber jetzt gerade nicht das Problem sein soll. (Kann später mal in angriff genommen werden.)
Da unter Libre der Befehl 'dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args2()) ' nicht ausgeführt wird wenn die Spalte Hidden ist, musste ich die Programmversionsabfrage mit einbauen um diese Spalte bei Bedarf vorher Einzublenden.
Die komplette Datei ist im Anhang. Alle eingetragenen Dateien sind natürlich nur auf meinem Recher vorhanden. Das erstellen der cmd sollte aber auch ohne diese gehen.
viewtopic.php?f=6&t=42230
Re: Erstellte .cmd Datei wird nicht ausgeführt
Beitrag von Nübby » Sa 26. Sep 2026, 19:59
Ja, das übliche gefrickel mit Basic. Allerdings in recht komplexer Form. Die Tabelle enthält über 10.000 Einträge die über Macros verwaltet werden. Die Datei ist für meine Fotos, Tieraufnahmen gemacht incl. Taxonomie und Metadaten einlesen (über ExifTool) und im Laufe der Jahre gewachsen. Der Grundcode zum erstellen und aufrufen der cmd ist im Original in
Sub aufruf_x(ereignis) ab Zeile 820 und sieht gekürzt so aus:
'...
tmpordner=Environ("TEMP"): if tmpordner="" then tmpordner=Environ("TMP")
tmpordner=tmpordner+"\"
mycell = mysheet1.getCellByPosition(7,zeile): name1=mycell.string `Pfad
mycell = mysheet1.getCellByPosition(2,zeile): name2=mycell.string 'Name
mycell = mysheet1.getCellByPosition(3,zeile): name3=mycell.string 'erw
dname=tmpordner+"aufruf.cmd" :
inh="@Echo off"+chr$(13)+"chcp 1252 >nul"+chr$(13)+chr$(34)+name1+name2+name3+chr$(34)
num3=freefile
open dname for output as #num3
print #num3,inh
close #num3
Shell (dname,4)
'....
mysheet1 ist natürlich vorher definiert. Bevor weitere Nachfragen nach Code kommen - Die komplette Datei ist sehr komplex und beinhaltet U.a. Betriebsystem (Windows/Linux) und Programm (OpenOff/LibreOff) abfragen. Unter Linux habe ich große Probleme mit einigen Befehlen, was aber jetzt gerade nicht das Problem sein soll. (Kann später mal in angriff genommen werden.)
Da unter Libre der Befehl 'dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args2()) ' nicht ausgeführt wird wenn die Spalte Hidden ist, musste ich die Programmversionsabfrage mit einbauen um diese Spalte bei Bedarf vorher Einzublenden.
Die komplette Datei ist im Anhang. Alle eingetragenen Dateien sind natürlich nur auf meinem Recher vorhanden. Das erstellen der cmd sollte aber auch ohne diese gehen.
- Dateianhänge
-
- Natur-Tiere_alle.ods
- (2.28 MiB) 8-mal heruntergeladen
Zuletzt geändert von Nübby am Mo 28. Sep 2026, 18:02, insgesamt 1-mal geändert.
Re: Erstellte .cmd Datei wird nicht immer ausgeführt
Hallo Karolus
Das mit dem Link statt Umständlichem Dateiaufruf hatte ich früher zuerst versucht. Hat dann nicht mehr funktioniert wenn Datei von wo anders gestartet wurde. (andererem Ordner oder Laufwerk). Auch habe ich im Programm die Möglichkeit eingebaut die gesamte Dateistrucktur (incl. aller Bilder...) auf externe Platte zu kopieren und dort (vom jeweiligen Laufwerk) ebenfalls überall alles Aufrufen zu können. Menüpunkt 'Aufruf vom aktuellen Lw. oder original Pfad'. Ich weiß nicht ob das auch mit (relativen-)Links gehen würde.
Hallo Mikele
Es sind keine Sonderzeichen in den Dateinamen enthalten. Um den Aufruf mit umlauten möglich zu machen wird Codepage 1252 (chcp 1252) vor dem Dateiaufruf ausgeführt. Ich weiß nicht warum die cmd selbst mal so und mal so erstellt wird. Es ist immer die gleiche Routine, Daten werden aus Feldern gelesen, zusammengesetzt und in Datei geschrieben. Es liegt nicht am Ordner der Quell Datei und nicht an der Quell Datei selber. Wenn ich sie kopiere geht es manchmal. Alle Daten sind übrigens unter Openoffice Eingelesen worden und sollten daher auch alle das gleiche Format haben.
Wie bereits geschrieben- unter Libre Version 26.2 gab es dieses Problem nicht. (Ebensowenig unter OpOf). Aufgrund von manchen Vorteilen in Libre würde ich es bevorzugen wenn es darunter weiterhin fehlerlos ginge.
Nochmal meine Frage: Warum wird die cmd Datei mal mit diesem und mal mit dem anderen Mime Typ erstellt. Kann ich das noch irgendwie beeinflussen.
Danke auf jeden Fall schon mal dafür, das ihr euch damit beschäftigt habt.
Das mit dem Link statt Umständlichem Dateiaufruf hatte ich früher zuerst versucht. Hat dann nicht mehr funktioniert wenn Datei von wo anders gestartet wurde. (andererem Ordner oder Laufwerk). Auch habe ich im Programm die Möglichkeit eingebaut die gesamte Dateistrucktur (incl. aller Bilder...) auf externe Platte zu kopieren und dort (vom jeweiligen Laufwerk) ebenfalls überall alles Aufrufen zu können. Menüpunkt 'Aufruf vom aktuellen Lw. oder original Pfad'. Ich weiß nicht ob das auch mit (relativen-)Links gehen würde.
Hallo Mikele
Es sind keine Sonderzeichen in den Dateinamen enthalten. Um den Aufruf mit umlauten möglich zu machen wird Codepage 1252 (chcp 1252) vor dem Dateiaufruf ausgeführt. Ich weiß nicht warum die cmd selbst mal so und mal so erstellt wird. Es ist immer die gleiche Routine, Daten werden aus Feldern gelesen, zusammengesetzt und in Datei geschrieben. Es liegt nicht am Ordner der Quell Datei und nicht an der Quell Datei selber. Wenn ich sie kopiere geht es manchmal. Alle Daten sind übrigens unter Openoffice Eingelesen worden und sollten daher auch alle das gleiche Format haben.
Wie bereits geschrieben- unter Libre Version 26.2 gab es dieses Problem nicht. (Ebensowenig unter OpOf). Aufgrund von manchen Vorteilen in Libre würde ich es bevorzugen wenn es darunter weiterhin fehlerlos ginge.
Nochmal meine Frage: Warum wird die cmd Datei mal mit diesem und mal mit dem anderen Mime Typ erstellt. Kann ich das noch irgendwie beeinflussen.
Danke auf jeden Fall schon mal dafür, das ihr euch damit beschäftigt habt.
Re: Erstellte .cmd Datei wird nicht immer ausgeführt
Hallo,
Meines Wissens nicht (ich habe nichts gefunden, woraus hervorgeht, welchen Zeichensatz open-print-close nutzt. Wie ich schon schrieb, ist es per SimpleFileAccess möglich.Kann ich das noch irgendwie beeinflussen.
Gruß,
mikele
mikele
Re: Erstellte .cmd Datei wird nicht immer ausgeführt
Versuchs mal mit »put« anstatt »print« in Zeile 853
Aber wie gesagt, das ist und bleibt umständliches Gefrickel! Eigenlich schade, denn ansonsten scheinst du da relativ solide gearbeitet zu haben.
Code: Alles auswählen
put #num3,inh LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)
Re: Erstellte .cmd Datei wird nicht immer ausgeführt
Das mit put# (Open binary.. put#..) hat es an dieser Stelle gar nicht getan - warum auch immer. Werde jetzt mal den Weg über den Service com.sun.star.ucb.SimpleFileAccess ausprobieren (muß mich da erst reinarbeiten, was etwas länger dauern kann). Werde berichten wenn es so weit ist.
Re: Erstellte .cmd Datei wird nicht immer ausgeführt
Ich habe das Problem identifiziert. Tatsächlich wird die cmd Datei sofort mit mime utf-8 deklariert sobald ein Umlaut innerhalb dieser Datei ist. Damit wird dann diese Datei unter Win11 nicht mehr ausgeführt. Diese Deklaration wurde jetzt wohl auch in Libre übernommen. (Wie bereits gesagt, in früheren Versionen ging es.) Das mir das erst jetzt aufgefallen ist liegt an meiner sporadischen Unfähigkeit auch ein ß im Text nicht gleich als Umlaut zu erkennen. Ich hatte es vorher noch mit SimpleFileAccess probiert. Aber dann wurde gar kein Aufruf mehr gestartet. Wen meine versuche damit Interessieren, hier die ersetzte Routine:
'neue schreib routine
Dim oSFA ' Der Service SimpleFileAccess.
Dim sFileName$ ' Name der zu öffnenden Datei.
Dim oStream ' Der von SimpleFileAccess zurückgegebene Stream.
Dim oTextStream ' Der Service TextStream.
Dim sStrings ' Strings für den Lese-/Schreibtest.
Dim sInput$ ' Der gelesene String.
Dim s$ ' Ausgabestring.
Dim i% ' Indexvariable.
If IsRootDir Then Exit Sub
sStrings = Array("Eins", "UTF:Āā", "1@3") ' Die Testdatei.
sFileName = dname 'CurDir() & "/WegMitMir.out"
oSFA = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")' Erzeugt den Service SimpleFileAccess.
oTextStream = CreateUnoService("com.sun.star.io.TextOutputStream")' Erzeugt den Schreibstream.
If oSFA.exists(sFileName) Then
oSFA.kill(sFileName)'Falls die Datei schon existiert, wird sie gelöscht.
End If
oStream = oSFA.openFileWrite(sFileName)' Die Datei wird zum Schreiben geöffnet.
' Verknüpft den einfachen Stream mit dem Textstream.
oTextStream.setOutputStream(oStream)' Der Textstream wird den einfachen Stream nutzen.
sStrings(1)=inh
'For i = LBound(sStrings) To UBound(sStrings) ' Schreibt die Strings.
oTextStream.writeString(sStrings(1) )
'Next
oTextStream.closeOutput()' Schließt den Stream.
' alte schreib routine
' num3=freefile
' open dname for output as #num3
' print #num3,inh
' close #num3
Die Datei wurde erstellt, ließ sich jedoch nie starten - auch die ohne Umlaute nicht mehr.
Jetzt muß ich mir eine Routine schreiben die mir die Umlaute im Text nach us-ascii umwandelt und dann mal sehen ob ich die Dateien noch irgendwie aufrufen kann. Aber ein Identifiziertes Problem kann schnell ein gelöstes Problem werden.
Damit werde ich dieses hier als gelöst betrachten.
'neue schreib routine
Dim oSFA ' Der Service SimpleFileAccess.
Dim sFileName$ ' Name der zu öffnenden Datei.
Dim oStream ' Der von SimpleFileAccess zurückgegebene Stream.
Dim oTextStream ' Der Service TextStream.
Dim sStrings ' Strings für den Lese-/Schreibtest.
Dim sInput$ ' Der gelesene String.
Dim s$ ' Ausgabestring.
Dim i% ' Indexvariable.
If IsRootDir Then Exit Sub
sStrings = Array("Eins", "UTF:Āā", "1@3") ' Die Testdatei.
sFileName = dname 'CurDir() & "/WegMitMir.out"
oSFA = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")' Erzeugt den Service SimpleFileAccess.
oTextStream = CreateUnoService("com.sun.star.io.TextOutputStream")' Erzeugt den Schreibstream.
If oSFA.exists(sFileName) Then
oSFA.kill(sFileName)'Falls die Datei schon existiert, wird sie gelöscht.
End If
oStream = oSFA.openFileWrite(sFileName)' Die Datei wird zum Schreiben geöffnet.
' Verknüpft den einfachen Stream mit dem Textstream.
oTextStream.setOutputStream(oStream)' Der Textstream wird den einfachen Stream nutzen.
sStrings(1)=inh
'For i = LBound(sStrings) To UBound(sStrings) ' Schreibt die Strings.
oTextStream.writeString(sStrings(1) )
'Next
oTextStream.closeOutput()' Schließt den Stream.
' alte schreib routine
' num3=freefile
' open dname for output as #num3
' print #num3,inh
' close #num3
Die Datei wurde erstellt, ließ sich jedoch nie starten - auch die ohne Umlaute nicht mehr.
Jetzt muß ich mir eine Routine schreiben die mir die Umlaute im Text nach us-ascii umwandelt und dann mal sehen ob ich die Dateien noch irgendwie aufrufen kann. Aber ein Identifiziertes Problem kann schnell ein gelöstes Problem werden.
Damit werde ich dieses hier als gelöst betrachten.
Re: Erstellte .cmd Datei wird nicht immer ausgeführt
Die ganze Akrobatik um die Pfade in eine temporäre Datei zu schreiben, könntest du mit python in 5 Zeilen erschlagen:
bräuchtest du aber garnicht, weil du den externen Kommandoaufruf auch schon gleich in python erledigen könntest:
bräuchtest du aber ebenfalls nicht, weil du vernünftigerweise gleich in Calc ( den Rest wiederhole ich nicht )
disclaimer: alle python-Codebeispiele gelten nur für Libreoffice … Die Museumswärter von AOO habens leider komplett verpennt von python2.7 auf python3.x umzusteigen.
Code: Alles auswählen
from tempfile import NamedTemporaryFile as temp
from pathlib import Path
temp_path = Path( temp().name ).with_suffix('.cmd')
with temp_path.open( 'w', encoding='utf8') as temp_file:
temp_file.write('/dein/pfad/zu/bildxyz.jpg')
Code: Alles auswählen
from subprocess import Popen
#bsplhaft für Linux
Popen(['xdg-open', 'dein/pfad/zum/bildxyz.jpg'])disclaimer: alle python-Codebeispiele gelten nur für Libreoffice … Die Museumswärter von AOO habens leider komplett verpennt von python2.7 auf python3.x umzusteigen.
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)
Re: [Gelöst] Erstellte .cmd Datei wird nicht immer ausgeführt
Hallo
siehe auch https://discuss.python.org/t/choosing-c ... popen/3388
und falls ich das richtig verstehe, könntest du statt 'utf8' 'utf16' ausprobieren ?!
Umlaute können nicht in »ascii« encodiert werden!!!die mir die Umlaute im Text nach us-ascii umwandelt
siehe auch https://discuss.python.org/t/choosing-c ... popen/3388
und falls ich das richtig verstehe, könntest du statt 'utf8' 'utf16' ausprobieren ?!
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)
Re: [Gelöst] Erstellte .cmd Datei wird nicht immer ausgeführt
Ist mir jetzt auch aufgefallen. Die Encodierung von der cmd Datei kann ich beim erstellen nicht beeinflussen.
Ich verwende jetzt einfach die Portable Version 26.2.4.2. Damit läuft einfach alles wie es ursprünglich war. Die erstellt die cmd übrigens mit iso-8859-1 Encodierung.
Ich verwende jetzt einfach die Portable Version 26.2.4.2. Damit läuft einfach alles wie es ursprünglich war. Die erstellt die cmd übrigens mit iso-8859-1 Encodierung.
