shell Leerzeichen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

moritz
*****
Beiträge: 216
Registriert: Mi, 20.10.2004 20:54

shell Leerzeichen

Beitrag von moritz »

Hallo,
weiß jemand zufällig, wie man dem Shellaufruf Parameter mit Leerzeichen übergeben kann?
Das Programm Foxit Reader wird in meinem Fall korrekt gestartet. Der Aufruf der Datei scheitert jedoch an den Leerzeichen im Pfad.

Shell("C:\Programme\Foxit Software\Foxit Reader\Foxit Reader.exe", 1, "-NoRegister d:\Moritz\\Park Nord\Stunden\Plan Dez 2007\test.pdf -n 1")
(OO 2.3.1, XP)
Vielen Dank
Moritz
gschuckar
****
Beiträge: 140
Registriert: Fr, 24.02.2006 14:27

Re: shell Leerzeichen

Beitrag von gschuckar »

Hallo Moritz
moritz hat geschrieben: Shell("C:\Programme\Foxit Software\Foxit Reader\Foxit Reader.exe", 1, "-NoRegister d:\Moritz\\Park Nord\Stunden\Plan Dez 2007\test.pdf -n 1")
Könnte es sein, das nicht das Leerzeichen, sondern der doppelte backslash zwischen Moritz und Park die Ursache des nicht Funktionierens ist?
Gruß
Gerd
moritz
*****
Beiträge: 216
Registriert: Mi, 20.10.2004 20:54

Re: shell Leerzeichen

Beitrag von moritz »

Nein, der ist nur hier drin, weil ich einen längeren Pfad gekürzt habe.
Moritz
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: shell Leerzeichen

Beitrag von Toxitom »

Hey Moritz,
bei auftretenden Leerzeichen sollte man an sich immer die URL-Notation verwenden - dort werden Leerzeichen maskiert (mit %20). Das kannst du auch manuell machen.
Ich würde alles durchprobieren, auch den direkten Aufruf ohne Parameter, also in der Form:
shell(""C:\Programme\Foxit Software\Foxit Reader\Foxit Reader.exe -NoRegister d:\Moritz\\Park Nord\Stunden\Plan Dez 2007\test.pdf -n 1")

Im Übrigen scheint mir der Aufruf an sich schon "merkwürdig. Schalter vor und hinter dem als Pfad übergebene Parameter? Wie soll das Programm das unterscheiden, das mit den Leerzeichen. Der Aufruf funktioniert doch so sicher nicht in der Eingabeaufforderung, also der Shell? Oder?

Auch könntest du den UNO-Shellbefehl (execute() - im Service com.sun.star.system.SystemShellExecute - ausprobieren - der ist eigentlich immer vorzuziehen :-)

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: shell Leerzeichen

Beitrag von komma4 »

Toxitom hat geschrieben:Auch könntest du den UNO-Shellbefehl (execute() - im Service com.sun.star.system.SystemShellExecute - ausprobieren - der ist eigentlich immer vorzuziehen :-)
Warum?
Ich würde die Laufzeitfunktion shell() vorziehen -wenn sie bei der Aufgabe funktioniert.
Die Aufbereitung der UNO-Funktion benötigt doch mehr Aufwand und Laufzeit-Ressourcen, oder?


[immer noch im Urlaub, grüssend aus Koh Kho Khao, Thailand: aktuell 28°C :-> ]
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: shell Leerzeichen

Beitrag von Toxitom »

Hey Winfried,
komma4 hat geschrieben:Die Aufbereitung der UNO-Funktion benötigt doch mehr Aufwand und Laufzeit-Ressourcen, oder?
Das ist korrekt - und wenn man nur unter Basic programmiert gebe ich dir auch recht.

Die Uno-Funktion hingegen ist flexibler (du brauchst beispielsweise nicht den korrekten Pfad des Programms zu wissen, wenn der Mime-Type im System registirert ist) , universeller (da auch in anderen Sprachen einsetzbar) und wird eher weitergepflegt. Die Basic-Funktionen nicht mehr.

Und wenn man programmiert, kann man sich doch gleich an die UNO Funktionen und ihre Erzeugung/Benutzung gewöhnen, oder nicht ;-)

Viele Grüße
Thomas

PS: der Dich natürlich beneidet - hier bei Regen und 3°C ...
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
moritz
*****
Beiträge: 216
Registriert: Mi, 20.10.2004 20:54

Re: shell Leerzeichen

Beitrag von moritz »

Hallo Toxitom,
siw Einfügung von %20 hab ich bereits ohne Erfolgt versucht, auch alles ohne Parameter. Der Befehlsaufruf funktioniert auf der Konsole, dort allerdings mit dem Zusatz von "", was eben in Starbasic so nicht möglich ist
So sieht der korrekte Aufruf das im Dos- Fenster aus.
"C:\Programme\Foxit Software\Foxit Reader\Foxit Reader.exe" -NoRegister "d:\Moritz\Park Nord\Stunden\Plan Dez 2007\test.pdf" -n 1

Und in Starbasic funktioniert das Ganze ohne "" auch, aber natürlich nur bei Pfaden ohne Leerzeichen.

Den UNO-Shellbefehl hab ich noch nicht ausprobiert.
Danke
Moritz
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: shell Leerzeichen

Beitrag von Stephan »

was eben in Starbasic so nicht möglich ist
versuche doch den Parameter als Inhalt einer String-Variable zu übergeben.



Gruß
Stephan
moritz
*****
Beiträge: 216
Registriert: Mi, 20.10.2004 20:54

Re: shell Leerzeichen

Beitrag von moritz »

Hab ich auch schon versucht.
So dunkel hab ich in Erinnerung, daß man "-Zeichen auch in Strings übergeben kann. Ich weiß aber nicht mehr, ob das in Starbasic möglich ist.
Moritz
moritz
*****
Beiträge: 216
Registriert: Mi, 20.10.2004 20:54

gelöst

Beitrag von moritz »

Ich wusste doch, das das gehen muß.
chr$(34) ist die Lösung. So werden die Anführungsstriche zwar in Zeichen konvertiert, aber vom Interpreter nicht ausgewertet.

sdateiname =chr$(34) & "d:\Moritz\Park Nord\Stunden\Plan Dez 2007\test.pdf" & chr$(34)
Shell("C:\Programme\Foxit Software\Foxit Reader\Foxit Reader.exe", 1, " -NoRegister " & sDateiname & " -n 1")

Moritz
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: shell Leerzeichen

Beitrag von komma4 »

geht ('einfach' zweimal schreiben):

Code: Alles auswählen

sSQL = " UPDATE ""tabelle"" SET ""gedruckt"" = " & now()
Viel Erfolg!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Antworten