BAT to EXE

Anfängerfragen zum Programmieren mit PureBasic.
Coder Pinhead
Beiträge: 234
Registriert: 27.02.2007 10:54
Wohnort: Germany

BAT to EXE

Beitrag 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.
Windows 8.1 x64 | PureBasic v5.x x86/x64

Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: BAT to EXE

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Coder Pinhead
Beiträge: 234
Registriert: 27.02.2007 10:54
Wohnort: Germany

Re: BAT to EXE

Beitrag 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)
Windows 8.1 x64 | PureBasic v5.x x86/x64

Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: BAT to EXE

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Coder Pinhead
Beiträge: 234
Registriert: 27.02.2007 10:54
Wohnort: Germany

Re: BAT to EXE

Beitrag 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()
Windows 8.1 x64 | PureBasic v5.x x86/x64

Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: BAT to EXE

Beitrag von Falko »

Dann probiere mal dieses hier :mrgreen:

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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: BAT to EXE

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: BAT to EXE

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: BAT to EXE

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: BAT to EXE

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