RunProgram Parameter

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
batzilla
Beiträge: 37
Registriert: 17.12.2005 21:44

RunProgram Parameter

Beitrag von batzilla »

Hallo Community!

Ich habe mal wieder ein Problem mit den Parametern, die ich einem über RunProgram gestarteten Programm übergebe:

Code: Alles auswählen

sicherung = RunProgram(RoboCopyPath$ + "robocopy.exe ", RoboCopySourcePath$ + Chr(32) + RoboCopyTargetPath$ + Chr(32) + "/E", RoboCopyPath$, #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
Das funktioniert, allerdings nur solange die Strings RoboCopySourcePath$ oder RoboCopySourcePath$ keine Leerzeichen enthalten.

Wenn ich die Pfadangaben mit DQUOTE$ umgebe funktioniert das aber nicht mehr, das Programm scheint dann mit den Parametern durcheinander zu kommen.

Code: Alles auswählen

sicherung = RunProgram(RoboCopyPath$ + "robocopy.exe ", #DQUOTE$ + RoboCopySourcePath$ + #DQUOTE$ + Chr(32) + #DQUOTE$ + RoboCopyTargetPath$ + #DQUOTE$ + Chr(32) + "/E", RoboCopyPath$, #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
Das Programm, in diesem Fall die robocopy.exe bekommt im ersten Fall den Quellpfad und den Zielpfad übergeben:

robocopy.exe c:\test1 c:\test2

Im zweiten Fall bei Verwendung von Pfadangaben mit Leerzeichen kommt es dann zum Fehler:

robocopy.exe "c:\ein langer test1" "c:\ein langer test2"

Im letzten Fall erhält das Programm diese Parameter:

Source : D:\Eigene Dateien\Dokumente\Familie" D:\Eigene\
Dest : C:\Programme\System\Windows Resource Kits\Tools\Dateien\Download"\

Die Pfade werde dort komischerweise vermischt.

Jemand eine Idee?
PB 4.02
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

jeden parameter, der eine pfad oder dateiangabe enthält, separat mit #DQUOTE$ einkreisen, sonst kann es nicht gehen :)
ist wie in der Eingabeaufforderung, da funzen lange Dateinamen auch nur mit " am anfang und " am ende
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
batzilla
Beiträge: 37
Registriert: 17.12.2005 21:44

Beitrag von batzilla »

Aber genau das habe ich gedacht würde ich damit tun:

Code: Alles auswählen

#DQUOTE$ + RoboCopySourcePath$ + #DQUOTE$ + Chr(32) + #DQUOTE$ + RoboCopyTargetPath$ + #DQUOTE$
Oder sehe ich da was falsch?
PB 4.02
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

laß mal den space hinter dem exe namen weg.

Code: Alles auswählen

sicherung = RunProgram(RoboCopyPath$ + "robocopy.exe",
und machste noch:

Code: Alles auswählen

Debug #DQUOTE$ + RoboCopySourcePath$ + #DQUOTE$ + Chr(32) + #DQUOTE$ + RoboCopyTargetPath$ + #DQUOTE$
diese kopieren und in der Eingabeaufforderung testen
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
batzilla
Beiträge: 37
Registriert: 17.12.2005 21:44

Beitrag von batzilla »

Leider kein Erfolg:

Code: Alles auswählen

Accessing Source Directory D:\Eigene Dateien\Dokumente\Familie" D:\Eigene\
Die Syntax f
PB 4.02
Benutzeravatar
batzilla
Beiträge: 37
Registriert: 17.12.2005 21:44

Beitrag von batzilla »

ts-soft hat geschrieben:laß mal den space hinter dem exe namen weg.

Code: Alles auswählen

sicherung = RunProgram(RoboCopyPath$ + "robocopy.exe",
und machste noch:

Code: Alles auswählen

Debug #DQUOTE$ + RoboCopySourcePath$ + #DQUOTE$ + Chr(32) + #DQUOTE$ + RoboCopyTargetPath$ + #DQUOTE$
diese kopieren und in der Eingabeaufforderung testen
Aus der Debugger-Ausgabe in die Eingabeaufforderung kopiert:

Gleicher Fehler, der Anfang des Zielverzeichnisses wird hinter das Ende des Quellverzeichnisses gehangen.

robocopy.exe interpretiert den SourcePath$ dann wie folgt:

D:\Eigene Dateien\Dokumente\Familie" D:\Eigene\
PB 4.02
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Der 3te Parameter ist WorkingDir, also dieser wird als CurrentDirectory für RobyCopy gesetzt. Normallerweise ""

Ansonsten, solange die Debugausgabe in der Eingabeaufforderung nicht funzt, haste eine Feher drinnen.

Erster Parameter ist die Exe, evt. mit Pfad. Zweiter Parameter ist die CommandZeile, die Übergeben wird. Überall wo dort ein " erforderlich ist, kommt ein Chr(34) oder #DQUOTE$ hin.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
batzilla
Beiträge: 37
Registriert: 17.12.2005 21:44

Beitrag von batzilla »

Der Fehler lag woanders...

robocopy mag keine abschließenden \ an Source- und Target-Verzeichnissen. Wenn man die Source- und Target-Verzeichnisse also so

Code: Alles auswählen

D:\Eigene Dateien\Dokumente\Familie
anstatt

Code: Alles auswählen

D:\Eigene Dateien\Dokumente\Familie\
angibst klappt das auch.

Danke für die Hilfe.
PB 4.02
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ist manchmal nicht so einfach zu berücksichtigen, das " als Stringanfang oder Ende interpretiert werden, und somit nicht übergeben werden.

Am besten immer eine Start.bat schreiben, die funzt, und daraus die Parameter bilden! :wink:

PS: Programme die Pfade als Parameter erwarten, diese aber nur ohne Backslash akzeptieren, sind IMHO schlecht programmiert :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
batzilla
Beiträge: 37
Registriert: 17.12.2005 21:44

Beitrag von batzilla »

Nun ja, robocopy ist aus dem Hause Microsoft...
PB 4.02
Antworten