Finden wir zunächst raus was du wirklich willst ...
RunShell( <cCmdLine> , ;
[<cProgram>] , ;
[<lAsync>] , ;
[<lBackground>],
[<aStdHandles>|<lInherit>] ) --> xReturn
Koverhage hat geschrieben: ↑Do, 07. Mai 2020 8:34
Die Datei soll im Hintergrund laufen und es soll gewartet werden, bis diese abgearbeitet ist.
Hintergrund ist
<lBackground> = .t. gemeint ist versteckt, eigentlich ist Hintergrundverarbeitung ja unabhängig, aber das meinen die nicht.
auf Ergebnis warten ist Syncron/Asyncron (die Hintergrundverarbeitung), der Parameter heißt
<lAsync>, du willst aber Syncron, also
<lAsync> = .f.
nun der Aufruf der CMD Datei, mit Parametern, warum eigentlich ?
Koverhage hat geschrieben: ↑Do, 07. Mai 2020 8:34
docopy.cmd
...
Batch/command Datei
---
set infile=%1%
set outfile=%2%
move %outfile% %infile%
--
wie muss ich die mit Runshell aufrufen ?
Ich verstehe nicht, warum du eine CMD machst, welche Parameter abfragt,
umsortiert ( %1% und %2% könnte man direkt bei MOVE angeben ...)
und dann move aufruft.
Wenn du die CMD selbst erstellst könntest du das schon vorher in der EXE erledigen.
Koverhage hat geschrieben: ↑Do, 07. Mai 2020 8:34
wie muss ich die mit Runshell aufrufen ?
Ich baue hier gerne die Parameter zusammen, Beispiel Parameter ist Pfad und Dateinamen einer PDF, Programm ist das Standardprogramm für PDF anzeige:
Code: Alles auswählen
if file(cPfad+cPDF)
if ! file(cAcrobat)
cAcrobat := GetStandardProgramm(cPDF, cPfad)
endif
runshell(cPfad+cPDF,cAcrobat,.t.)
endif
bei dir sollte das funktionieren:
// wenn Blanks im Namen der Dateien vorkommen können, müssen die in "" eingeschlossen werden !
Code: Alles auswählen
cParam := ' /C MeineCmd.CMD "c:\pfad\Meine Quell Datei" "c:\pfad\Meine Ziel Datei" ' // also String einleiten mit ' oder [ und beenden mit ' oder ]
runshell(cParam,"CMD.EXE",.f.,.t.)
hier ein anderes Beispiel:
Code: Alles auswählen
cCmd := "cmd.exe"
cCmdLine := "/C smp" + cID + ".cmd" // am Anfang das '/C' soll verhindern, dass viele Instanzen von CMD.EXE gleichzeitig laufen, /C nimmt den aktuellen
RunShell(cCmdLine, cCmd, lParallel, lBackGround)
um das mit den " um die Dateinamen zu vereinfachen nutze ich gerne Variablen:
Code: Alles auswählen
cCmd := "cmd.exe"
DQ := chr(34)
cCmdLine := "/C docopy.cmd "+DQ+cVonFile+DQ+" "+DQ+cNachFile+DQ+" "
runshell(cCmdLine, cCMD,.f.,.t.)
oder auch:
runshell(cCmdLine, , .f. , .t. ) // the default value is "CMD.EXE" (OS/2, Windows NT) also könnte man das auch einfach weg lassen