CMD File mit Parameter aufrufen

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

CMD File mit Parameter aufrufen

Beitrag 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.
Gruß
Klaus
sammler0002
UDF-Programmierer
UDF-Programmierer
Beiträge: 63
Registriert: Mi, 23. Dez 2015 22:46
Hat sich bedankt: 21 Mal
Danksagung erhalten: 4 Mal

Re: CMD File mit Parameter aufrufen

Beitrag 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.
Grüße von Philipp
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: CMD File mit Parameter aufrufen

Beitrag 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
Gruß
Hubert
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: CMD File mit Parameter aufrufen

Beitrag von Koverhage »

Hubert,
vor dem MOVE kommen noch ein paar andere Befehle, die aber hier nicht wichtig sind ;-)
Gruß
Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: CMD File mit Parameter aufrufen

Beitrag 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
Gruß
Hubert
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: CMD File mit Parameter aufrufen

Beitrag 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
Antworten