Seite 1 von 2
RunProgram mit mehreren Parametern
Verfasst: 19.10.2005 20:55
von Klaus
Hallo,
ich will ein externes Programm aufrufen, daß eine gegebene Datei in eine andere konvertriert. Mit der Windows-Konsole funktioniert es auch:
ncdumps.exe signal01.cdf > signal01.data
In Purebasic müsste das doch so aussehen:
Code: Alles auswählen
RunProgram("ncdumps.exe", "signal01.cdf > signal01.data", "d:\projekte\chrom\", #PB_RunProgram_Wait)
Mit meinem Purebasic-Programm scheinte es aber das nur "ncdumps.exe signal01.cdf" an das Programm geliefert wird.
Irgendwelche Vorschläge?
Gruß
Klaus
Verfasst: 19.10.2005 21:05
von ts-soft
So in etwa könnte es gehen:
Code: Alles auswählen
Procedure.s GetEnv(szVariable.s)
Protected Length.l, Buffer.s
Length = GetEnvironmentVariable_(@szVariable, @Buffer, 0)
If Length
Buffer = Space(Length)
GetEnvironmentVariable_(@szVariable, @Buffer, Length)
ProcedureReturn Buffer
EndIf
ProcedureReturn ""
EndProcedure
RunProgram(GetEnv("COMSPEC") + " /C", Chr(34) + "ncdumps.exe signal01.cdf > signal01.Data d:\projekte\chrom\" + Chr(34), "", 1)
Kanns aber nicht testen, da ich keine ncdumps.exe habe
Vielleicht den Pfad auch in den dritten Parameter legen?
Verfasst: 19.10.2005 21:55
von hardfalcon
AFAIK wird bei RunProgram() jedes durch Leerzeichen getrennte Wort als eigener Parameter behandelt. Also müsstest du das > als einzelnen Parameter angeben. Bin aber jetzt zu faul, das zu probieren...

Verfasst: 19.10.2005 22:08
von Klaus
@Thomas:
Hat leider nicht funktioniert.
@hardfalcon:
Wie meinst du einzeln angeben?
Gruß
Klaus
Re: RunProgram mit mehreren Parametern
Verfasst: 19.10.2005 22:17
von Captn. Jinguji
Klaus hat geschrieben:Hallo,
ich will ein externes Programm aufrufen, daß eine gegebene Datei in eine andere konvertriert. Mit der Windows-Konsole funktioniert es auch:
ncdumps.exe signal01.cdf > signal01.data
In Purebasic müsste das doch so aussehen:
Code: Alles auswählen
RunProgram("ncdumps.exe", "signal01.cdf > signal01.data", "d:\projekte\chrom", #PB_RunProgram_Wait)
Mit meinem Purebasic-Programm scheinte es aber das nur "ncdumps.exe signal01.cdf" an das Programm geliefert wird.
Irgendwelche Vorschläge?
Grußsignal01.cdf >
Klaus
Die Umlenkung ist AFAIK eine Leistung, die die shell cmd.exe erbringt.
insofern müsste der Aufruf so lauten:
result =RunProgram ("C:\WINDOWS\system32\cmd.exe",
"/C ncdumps signal01.cdf > signal01.data","d:\projekte\chrom",1)
Eine Umlenkung der Ausgabe eines Programmes mit pipe in sort.exe funktioniert jedenfalls bei mir auf diese Art aus PB heraus.
Verfasst: 19.10.2005 22:39
von Klaus
Ja, daß ist die Lösung
Code: Alles auswählen
RunProgram ("E:\WINNT\system32\cmd.exe", "/C ncdumps signal01.cdf > signal01.data","d:\projekte\chrom\",1)
Vielen Dank an Euch!
Grüsse
Klaus
P.S.: War schon echt am verzweifeln, seit drei Tagen...
Verfasst: 19.10.2005 22:40
von Captn. Jinguji
War uns ein Vergnügen!
Verfasst: 20.10.2005 08:53
von ts-soft
>> RunProgram(GetEnv("COMSPEC") + " /C",
Was hab ich den hier gemacht, den Kommandeinterpreter des Systems aufgerufen, also cmd.exe ab w2k, bzw. command.com vorher.
Euer Aufruf läuft ja nur auf eurem Computer, bei mir würde das nie funzen. Hab kein Windows 2000
Also bei meinem nur die Parameter etwas korrigieren, dann stimmts. Hätte es ja selber gemacht, habe aber das Programm nicht.
//Nachtrag: korrigierter Code:
Code: Alles auswählen
Procedure.s GetEnv(szVariable.s)
Protected Length.l, Buffer.s
Length = GetEnvironmentVariable_(@szVariable, @Buffer, 0)
If Length
Buffer = Space(Length)
GetEnvironmentVariable_(@szVariable, @Buffer, Length)
ProcedureReturn Buffer
EndIf
ProcedureReturn ""
EndProcedure
RunProgram (GetEnv("COMPSPEC"), "/C ncdumps signal01.cdf > signal01.Data","d:\projekte\chrom\",1)
Verfasst: 20.10.2005 09:43
von Captn. Jinguji
Hallo,Thomas
ts-soft hat geschrieben:>> RunProgram(GetEnv("COMSPEC") + " /C",
Was hab ich den hier gemacht, den Kommandeinterpreter des Systems aufgerufen, also cmd.exe ab w2k, bzw. command.com vorher.
Euer Aufruf läuft ja nur auf eurem Computer, bei mir würde das nie funzen. Hab kein Windows 2000
Also bei meinem nur die Parameter etwas korrigieren, dann stimmts. Hätte es ja selber gemacht, habe aber das Programm nicht.
Ja, neee. DEINE erste Version lief nicht, weil du "/C" stringmässig an den COMSPEC Wert gebunden und danach erst den Argumentstring gebaut und übergeben hattest. "/C" ist aber selbst schon ein Argument und gehört in den Argumentstring.
Das hast Du dann nachträglich ja auch korrigiert
MIt der allgemeineren Benutzung von COMSPEC statt ".\CMD.EXE" haste sicherlich wahr

, aber es ging ja hier um eine schnelle Lösung.
Und, naja, ICH habe sein EXE.Programm auch nicht, TESTEN kann man aber mit vergleichbaren Konstrukten, wie bei mir beschrieben.
Es ging ihm bei seiner Frage hier ja nicht um die fachlich korrekte Datenumsetzung, sondern um die Funktionalität eines Aufrufs von Programmen mit Argumenten aus RunProgram;)
Gruss Dirk
Verfasst: 20.10.2005 09:55
von ts-soft
>> Es ging ihm bei seiner Frage hier ja nicht um die fachlich korrekte Datenumsetzung, sondern um die Funktionalität eines Aufrufs von Programmen mit Argumenten aus RunProgram;)
Ich bemühe mich immer um eine fachlich korrekte Antwort, hab schon zuviele Programme getestet, die mit nicht vorhandenen Pfaden, Schaden angerichtet haben. Gerade bei Anfängern, sollte es Fachlich korrekt umgesetzt sein, auch wenn der Code dadurch schlechter verstanden wird. Er könnte dann ja anschließend fragen, was es mit "COMSPEC" auf sich hat.
