Seite 1 von 1

CMD File mit Parameter aufrufen

Verfasst: Do, 07. Mai 2020 8:34
von Koverhage
Ich habe folgende

docopy.cmd

Batch/command Datei
---
set infile=%1%
set outfile=%2%
move %outfile% %infile%
--
wie muss ich die mit Runshell aufrufen ?
Die Datei soll im Hintergrund laufen und es soll gewartet werden, bis diese abgearbeitet ist.

Re: CMD File mit Parameter aufrufen

Verfasst: Do, 07. Mai 2020 8:58
von sammler0002
Moin,

bezüglich der Runshell hatte Carlo mal was ganz nützliches gepostet:

viewtopic.php?f=32&t=10665&p=124627&hil ... ll#p124627

Vielleicht hilft Dir das weiter.

Re: CMD File mit Parameter aufrufen

Verfasst: Do, 07. Mai 2020 9:46
von brandelh
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

Re: CMD File mit Parameter aufrufen

Verfasst: Do, 07. Mai 2020 10:01
von Koverhage
Hubert,
vor dem MOVE kommen noch ein paar andere Befehle, die aber hier nicht wichtig sind ;-)

Re: CMD File mit Parameter aufrufen

Verfasst: Fr, 08. Mai 2020 10:47
von brandelh
Hallo Klaus,

zum Glück hast du diese Frage gestellt, eben wollte ich eine Batch mit Variablen bestücken und hab total vergessen wie es geht ... aber ich wusste du hattest da ein Beispiel :D

Re: CMD File mit Parameter aufrufen

Verfasst: Fr, 08. Mai 2020 17:10
von mini990
Ich nutze die Runshell immer so.....

Code: Alles auswählen

cmdline:="/C " + cProgrammPfad + "\BATCH.BAT "
RUNSHELL( cmdline,"cmd.exe",.F.,.T.)
Funktioniert zuverlässig....

Gruß Stefan