Seite 3 von 4

Re: BAT to EXE

Verfasst: 29.04.2011 22:36
von shadow
Würd's ein Lua-Script nicht einfach auch tun :?
Also soviel ich weiß kann diese Skript-Sprache alles was BATCH kann und irgendjemand in der Community hat doch schon eine Integration für PB gemacht (hab ich mal gelesen hier irgendwo...).
Des Weiteren gibt es auch PB-Skript als nette alternative... Nur mal so am Rande, denn BATCH finde ich nicht so prickelnd weil einfach zu viele wichtige Funktionen nicht vorhanden sind...

Re: BAT to EXE

Verfasst: 30.04.2011 01:05
von Falko
Coder Pinhead hat geschrieben:
RSBasic hat geschrieben:

Code: Alles auswählen

%date%
Hat auch geklappt danke.

Dann wäre da noch eine Sache die auch nicht so richtig funktioniert und zwar Sprünge.
Denke mal das man das so einfach bestimmt nicht Lösen kann, oder?

Wird wohl doch besser sein das teil einfach direkt in PureBasic zu Programmieren.
Bin nur ark aus der Übung da ich seit etwas über 3 Jahren nichts mehr gemacht hab.
Ich habe das nun mit RSBasic's Codebeispiel und Sprungmarken versucht. Somit kannst du
das evtl. so lösen. Hierzu ein Beispiel, wobei die Sprungmarken über PB und nicht per Batch-Befehl
erzeugt werden.

Code: Alles auswählen

ImportC "msvcrt.lib"
  system(cmd.p-ascii)
EndImport

If OpenConsole()
  system("@echo off")
  system("title Test Batch")
  system("ren %USERPROFILE%\Desktop\irgendeinedatei.exe "+Chr(34)+"backup%date%.exe"+Chr(34)+"2>NUL >NUL")
  Goto springe  ;system("goto springe") geht nicht, daher Sprünge direkt in PB mit Goto
  system("echo hallo"); dieses Echo wird aufgrund des Sprungs nicht ausgeführt.
  springe: ; system(":springe") geht leider auch nicht, daher Sprungmarken am Besten als PB-Befehl einbauen.
  system("echo gesprungen") ; wird beim Sprung jetzt korrekt angesprungen
  system("pause")
  CloseConsole()
EndIf
Ich hoffe, damit kannst du was anfangen.

Gruß, Falko

Re: BAT to EXE

Verfasst: 30.04.2011 01:13
von ts-soft
Aber was kann denn nun ein Batch, was PB nicht kann :lol:
Man kann sich das Leben natürlich schwer und kompliziert machen, aber warum sollte man das tun?

Re: BAT to EXE

Verfasst: 30.04.2011 08:30
von Waldixxl
Hallo Coder Pinhead

Versuch doch einfach aus der Bat-Datei ein EXE zu machen. (z.B mit "Bat To Exe Converter 1.5.1")
Dann kannst Du deine Ursprünglich Idee mit IncludeBinary weiter verfolgen!
Gruß
Walter

Re: BAT to EXE

Verfasst: 30.04.2011 14:24
von Bisonte
ts-soft hat geschrieben:Aber was kann denn nun ein Batch, was PB nicht kann :lol:
Man kann sich das Leben natürlich schwer und kompliziert machen, aber warum sollte man das tun?
Diese beiden Fragen beschäftigen mich seit dem ich den Thread das erstemal erblickte....

Irgendein Programm starten... Kopieren... wassweissich... ist alles sogar nativ crossplatformed in PB.

Es schreckt wahrscheinlich ab, dass man evt. 2-3 Zeilen mehr Code schreiben müsste....

Re: BAT to EXE

Verfasst: 30.04.2011 14:51
von Coder Pinhead
Falko hat geschrieben:

Code: Alles auswählen

ImportC "msvcrt.lib"
  system(cmd.p-ascii)
EndImport

If OpenConsole()
  system("@echo off")
  system("title Test Batch")
  system("ren %USERPROFILE%\Desktop\irgendeinedatei.exe "+Chr(34)+"backup%date%.exe"+Chr(34)+"2>NUL >NUL")
  Goto springe  ;system("goto springe") geht nicht, daher Sprünge direkt in PB mit Goto
  system("echo hallo"); dieses Echo wird aufgrund des Sprungs nicht ausgeführt.
  springe: ; system(":springe") geht leider auch nicht, daher Sprungmarken am Besten als PB-Befehl einbauen.
  system("echo gesprungen") ; wird beim Sprung jetzt korrekt angesprungen
  system("pause")
  CloseConsole()
EndIf
Im großem und ganzen funktioniert jetzt alles abgesehen von einer Kleinigkeit und zwar dem %errorlevel%.

Code: Alles auswählen

... befehle
... ohne
... ende
system("If errorlevel 1 Goto error")
system("If errorlevel 0 Goto noerror")
error:
system("echo Fehler")
noerror:
system("echo Kein Fehler")
... usw...
Laut Google kann man so was so lösen

Code: Alles auswählen

Try
  '...
 Catch ex As Exception
   Environment.Exit(1) 'Errorlevel = 1
 End Try

 Environment.Exit(0) 'Errorlevel = 0
End Sub
Aber das Code Beispiel ist leider für Visual-Basic.

Re: BAT to EXE

Verfasst: 30.04.2011 15:07
von Falko
Probiere doch folgendes aus:

Code: Alles auswählen

  system("if %errorlevel% == 0 (echo kein Fehler)")
  system("if %errorlevel% == 1 (echo Fehler)")
Mit dem Goto oder Call innerhalb der selben batch funktioniert das mit der
CMD.exe leider nicht, da diese wohl die batdatei benötigt um intern diese nochmal
aufzurufen, damit gesprungen werden kann.
Wenn du aber nur Fehler ausgeben willst, könntest du es wie oben nutzen
[Edit] Aber...
mit dieser Zeile ist es auch möglich andere Anwendungen mittels errorlevel direkt auszuführen.

Code: Alles auswählen

 system("if %errorlevel% == 0 (call notepad.exe)")
[/Edit]
Gruß Falko

Re: BAT to EXE

Verfasst: 30.04.2011 15:09
von Danilo
Coder Pinhead hat geschrieben:Im großem und ganzen funktioniert jetzt alles abgesehen von einer Kleinigkeit und zwar dem %errorlevel%.
In PureBasic bekommst Du den errorlevel mit ProgramExitCode()

Code: Alles auswählen

Program = RunProgram(...,...,...,#PB_Program_Open)
...
errorlevel = ProgramExitCode(Program)

If errorlevel
  Print("Fehler")
Else
  Print("Kein Fehler")
EndIf
Und selbst gibst Du ihn mit "End errorlevel" zurück.

Re: BAT to EXE

Verfasst: 30.04.2011 15:52
von Coder Pinhead
Verstehe das mit ProgramExitCode() und End errorlevel in dem fall nicht so ganz wie ich das einbringen kann bzw so wie ich es gerade mal ausprobiert hatte wahrscheinlich falsch hatte es das Programm direkt nach dem ausführen beendet ohne die Sprünge zu berücksichtigen.

Re: BAT to EXE

Verfasst: 30.04.2011 15:59
von Falko
Nur brauchst du für die Ausgabe der Errorlevel wiedermal
das Runprogramm... in der die CMD aufgerufen wird.

Gruß Falko