Seite 1 von 4
BAT to EXE
Verfasst: 29.04.2011 12:14
von Coder Pinhead
Hallo Leute,
Also ich würde gerne eine Batch-Datei in einer EXE zum Laufen bekommen und ich weiß das, dass mit
IncludeBinary() Realisierbar ist nur ich Kriegs trotzdem irgend wie nicht gebacken.
Code: Alles auswählen
DataSection
Batch:
IncludeBinary "c:\batch.bat"
EndDataSection
Ich hoffe ihr könnt mir dabei Helfen und Danke schon ein mal im voraus.
Re: BAT to EXE
Verfasst: 29.04.2011 13:33
von ts-soft
Eine Batch-Datei ist nur ein Textfile mit der Dateiendung bat. Kannst Du also auch als
solchen erstellen.
CreateFile
WriteString
WriteString ...
CloseFile.
Re: BAT to EXE
Verfasst: 29.04.2011 13:57
von Coder Pinhead
Ich weiß würde sie aber lieber per
IncludeBinary() einbauen und direkt ausführen lassen.
Möchte gar nicht erst das Temporär über Umwege eine Datei erstellt wird die dann ausgeführt wird und am ende manuell oder per Befehl gelöscht wird.
Code: Alles auswählen
CreateFile(0, "batch.bat")
WriteStringN(0,"@echo off")
WriteStringN(0,"title Test Batch")
WriteStringN(0,"cd c:\")
WriteString(0,"exit")
CloseFile(0)
Re: BAT to EXE
Verfasst: 29.04.2011 14:22
von ts-soft
Ohne diese "Umweg" kann es aber nicht gehen!
Alternativ kannst Du natürlich einen Code in PB schreiben, der genau dasselbe macht
wie die Batch-Datei.
Re: BAT to EXE
Verfasst: 29.04.2011 14:39
von Coder Pinhead
Schade, geht wohl nicht anders.
Werde dann die gute Batch-Datei irgend wann mal mit PureBasic vollenden.
Bis dahin begnüge ich mich mit einer noch simpleren Lösung.
Code: Alles auswählen
OpenConsole()
EnableGraphicalConsole(1)
RunProgram("batch.bat")
Input()
Re: BAT to EXE
Verfasst: 29.04.2011 18:29
von Falko
Dann probiere mal dieses hier
Code: Alles auswählen
MyBatch.s="/C @echo on"
MyBatch+"& title Test Batch"
MyBatch+"& dir"
MyBatch+"& pause"
RunProgram("cmd",MyBatch,"")
Einfach weitere MyBatch+"& Commands" drann hängen,womit
du dir das temporäre speichern schenken kannst.
Gruß, Falko
Re: BAT to EXE
Verfasst: 29.04.2011 19:21
von RSBasic
@Falko
Es ist zwar ne schöne Idee, Befehle miteinander zu verketten und diese als Ganzes per RunProgramm() auszuführen, aber man muss bedenken, dass man nur kleine Batch-"Dateien" übergeben kann, da auch das Übergeben von Parametern begrenzt ist.
Sinnvoller ist, seine Datei, die im DataSection gespeichert ist, im Temp-Verzeichnis zu speichern und diese dann auszuführen.
Re: BAT to EXE
Verfasst: 29.04.2011 19:51
von Falko
RSBasic hat geschrieben:@Falko
Es ist zwar ne schöne Idee, Befehle miteinander zu verketten und diese als Ganzes per RunProgramm() auszuführen, aber man muss bedenken, dass man nur kleine Batch-"Dateien" übergeben kann, da auch das Übergeben von Parametern begrenzt ist.
Sinnvoller ist, seine Datei, die im DataSection gespeichert ist, im Temp-Verzeichnis zu speichern und diese dann auszuführen.
Sicher kann man nur kleine Batchdateien in Abhängigkeit der Parameterbegrenzung nutzen. Aber viel Kleinvieh
macht auch viel mist.
Das soll heissen:
Sobald die erste CMD-Ausgabe getan ist, führt die Exe weitere Kommandos über ein erneutes RunProgramm aus.
Da sehe ich keine Nachteile.Und der Vorteil ist hierbei, das man eben nicht die Textdateien (.bat und .cmd) so leicht einsehen kann. Auch eine kurz gespeicherte Tempdatei lässt sich kopieren und einsehen.
[Edit]
Als Test habe ich mal echos eingesetzt, um zu sehen, wieviele Buchstaben über CMD möglich sind.
Ich komme hiermit auf 8064 Buchstaben bei 127 Comands , womit sich schon größere Batches aufbauen lassen.
Ich denke nicht, das man so viele Zeilen für eine Batch benötigt ( siehe folgenden Testsource)
Code: Alles auswählen
MyBatch.s="/K @echo on"
MyBatch+"& title Test Batch"
MyBatch+"& dir"
MyBatch+"& pause"
For i =1 To 123
MyBatch+"& echo Hallo, das ist mal ein schöner Satz, der vervielfacht wird"
Next
MyBatch+"& echo Hier höre ich mal auf"
Debug Len(MyBatch)
MyProg=RunProgram("cmd",MyBatch,"",#PB_Program_Write)
[/Edit]
Gruß Falko
Re: BAT to EXE
Verfasst: 29.04.2011 20:28
von RSBasic
Dann kann man doch gleich die Konsole benutzen. Somit braucht man nicht ständig irgendwelche Parameter übergeben:
Code: Alles auswählen
ImportC "msvcrt.lib"
system(cmd.p-ascii)
EndImport
If OpenConsole()
system("title Test Batch")
system("dir")
system("echo PureBasic Forever")
system("pause")
CloseConsole()
EndIf
Re: BAT to EXE
Verfasst: 29.04.2011 20:33
von edel
hier mal ohne extra datei und fenster :
Code: Alles auswählen
handle = RunProgram("cmd.exe","","", #PB_Program_Read | #PB_Program_Write | #PB_Program_Open | #PB_Program_Hide )
Delay(100)
If ProgramRunning(handle)
WriteProgramStringN(handle, "echo hallo")
WriteProgramStringN(handle, "dir /B")
Delay(20)
While AvailableProgramOutput(handle)
size = AvailableProgramOutput(handle)
daten.s = Space(size)
ReadProgramData(handle, @daten, size)
Wend
For i = 1 To CountString(daten, #LF$) + 1
Debug StringField(daten, i, #LF$)
Next
KillProgram(handle)
CloseProgram(handle)
EndIf