Seite 1 von 2

RunProgram Parameter

Verfasst: 31.05.2006 19:46
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?

Verfasst: 31.05.2006 19:53
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

Verfasst: 31.05.2006 19:55
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?

Verfasst: 31.05.2006 19:58
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

Verfasst: 31.05.2006 20:01
von batzilla
Leider kein Erfolg:

Code: Alles auswählen

Accessing Source Directory D:\Eigene Dateien\Dokumente\Familie" D:\Eigene\
Die Syntax f

Verfasst: 31.05.2006 20:07
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\

Verfasst: 31.05.2006 20:15
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.

Verfasst: 31.05.2006 20:51
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.

Verfasst: 31.05.2006 20:57
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:

Verfasst: 31.05.2006 21:00
von batzilla
Nun ja, robocopy ist aus dem Hause Microsoft...