Seite 1 von 1

Batch-Datei aus xBase aufrufen?

Verfasst: Mo, 03. Mai 2021 11:12
von Wolfgang_B
Guten Morgen,
stehe wieder mal auf dem Schlauch...
Wie kann ich denn aus einem xBase-Programm (Menü) eine Batch-Datei aufrufen und ausführen?

Habe mich schon mit DLLCALL bemüht, kriege das aber nicht hin..

Re: Batch-Datei aus xBase aufrufen?

Verfasst: Mo, 03. Mai 2021 11:18
von georg
Hallo, Wolfgang -


viel, viel einfacher ...

Code: Alles auswählen

   cCmd := "cmd.exe"
   cCmdLine := "/C smp" + cID + ".cmd"
   nHandle := RunShell(cCmdLine, cCmd, lParallel, lBackGround)
einfach gerade aus einem meiner Programm rauskopiert.

Re: Batch-Datei aus xBase aufrufen?

Verfasst: Mo, 03. Mai 2021 12:17
von Wolfgang_B
Hallo Georg,
danke erstmal.
Es wird zwar ein CMD-Fenster geöffnet, aber sonst nichts. Selbst wenn ich für cId den Batchnamen eingebe z.B. "test" und statt ".cmd" ".bat"

Re: Batch-Datei aus xBase aufrufen?

Verfasst: Mo, 03. Mai 2021 12:24
von Martin Altmann
Moin Woflgang,
schau Dir mal seine zweite Zeile an - da baut er den Namen seiner Batchdatei zusammen.
In Deinem Fall müsste sie also wie folgt lauten:

Code: Alles auswählen

cCmd := "cmd.exe"
cCmdLine := "/C test.bat"
nHandle := RunShell(cCmdLine, cCmd, lParallel, lBackGround)
Zwei Hinweise:
Nimm möglichst nicht .bat, sondern .cmd als Endung.
Gib den kompletten Pfad an - sowohl bei der Belegung von cCmd, als auch bei cCmdLine

Viele Grüße,
Martin

Re: Batch-Datei aus xBase aufrufen?

Verfasst: Mo, 03. Mai 2021 12:31
von Wolfgang_B
da ändert sich nichts. Es wird nur ein CMD-Fenster geöffnet ...
cId := "d:\vwin5\vwin5_backup"
cCmd := "cmd.exe"
cCmdLine := "/D smp" + cId + ".cmd"
nHandle := RunShell(cCmdLine, cCmd, .F., .F.)

Re: Batch-Datei aus xBase aufrufen?

Verfasst: Mo, 03. Mai 2021 12:47
von Martin Altmann
Dann korrigiere das mal richtig!
Laut Deinen Zeilen heißt Deine Batch: smpd:\vwin5\vwin5_backup.cmd :!:

Viele Grüße,
Martin

Re: Batch-Datei aus xBase aufrufen?

Verfasst: Mo, 03. Mai 2021 12:59
von Tom
Es ist viel einfacher:

Code: Alles auswählen

RunShell(<cParameterfürdasBatch>,<cNameundPfaddesBatches>,.F.)
also beispielsweise

Code: Alles auswählen

RunShell ("c:\MeinProg\*.prg","copyfiles.bat",.F.)
(Und "copyfiles.bat" enthalt dann etwas wie "xcopy %1 f:\Sicherungen\SicherungHeute\".)

Ausgeführt wird automatisch im Ausführungsverzeichnis der EXE, es sei denn, man hat es gewechselt. Es muss das Recht vorhanden sein, den Batchjob auszuführen.

Re: Batch-Datei aus xBase aufrufen?

Verfasst: Mo, 03. Mai 2021 13:27
von Wolfgang_B
Danke Tom, so einfach .. :D

Re: Batch-Datei aus xBase aufrufen?

Verfasst: Mo, 03. Mai 2021 14:48
von Wolfgang_B
Es geht noch weiter :D

Die Batchdatei ist im Verzeichnis d:\vwin5\vwinbackup.bat. Das funktioniert.
Im Netzbetrieb heißt das Verzeichnis \\dev3\vwin5. Die "\\" am Beginn des Pfades kann ich ja abfragen und den Aufruf entsprechend gestalten.

Code: Alles auswählen

IF SUBSTR(CURDIR(),1,2) == "\\"
		pfad := CURDIR()+"\"
	ELSE
		pfad := CURDRIVE()+":\"+CURDIR()+"\"
	ENDIf
			
	IF !FILE( pfad+"vwinbackup.bat")
		MSgBox("Datei -> "+pfad+"vwinbackup.bat"+" ist nicht vorhanden")
	 	RETURN(NIL)
	ELSE	
	 	RunShell (pfad+"vprog.exe","vvwinbackup.bat",.F.)
	ENDIF
Das Problem kommt dann, wenn ich dieses Konstrukt auf dem Netzwerkrechner aufrufe. Dann kommt klassische Fehlermeldung:

"CMD.EXE wurde mit dem oben angegebenen Pfad als aktuellem Verzeichnis gestartet. UNC-Pfade werden nicht unterstützt. Stattdessen wird das Windows-Verzeichnis als aktuelles Verzeichnis gesetzt" --> Damit -> Der Befehl "7z" (in der Batchdatei) ist entweder falsch oder wurde nicht gefunden ..

gewünscht ist: Ausführen der Batch-Datei auf dem Rechner, auf dem das xBase-Programm installiert ist und anlegen der 7z-Datei im Verzeichnis der Programmdatei.