Eigene Programmiersprache in Batch geschrieben?
Hallo! Ich hätte eine Frage über Batch.
Also ich würde gerne wissen, wie man eine Programmiersprache mit Batch schreibt.
Ich weiß es klingt bescheuert aber mit viel Aufwand könnt man es schaffen oder nicht? Meine ersten Fortschritte begannen damit, dass ich ein eigenes Ausführprogramm machte. Ich musste nur den Path angeben und schon durchsuchte er die (".casper") Datei von bekannten Befehlen wie z.B. ("mtc_[Hello World!] "). Dieser Befehl sollte eine Message-Box zeigen lassen, in der „Hello World“! steht. Aber kommen wir jetzt mal zu der Frage:
Mein Programm kann nur eingespeicherte Nachrichten schicken, in diesem Fall „Hello World!“. Das mache ich immer mit dem Befehl "find" und "if errorlevel 1 goto..". Aber könnte man es so machen, dass ich nicht mehr alle Möglichkeiten abspeichern muss, sondern sich das Programm an die Message anpasst und so die Kommandos ausführt?
Wäre schön wenn ihr eine Antwort auf meine Frage finden könntet. Vielen Dank!
Danke fürs lesen! GB2006.
3 Antworten
Das ganze dürfte wohl unter Just for Fun laufen.
Ich habe in den letzten halben Stunde einen kleinen Blubb-Parser geschrieben der die Blubb-Sprache Interpretiert. Blubb kennt nur drei Befehle:
- "Blubbo" gibt einen Text aus
- "Blubbadd" zeigt das Ergebniss zweier Zahlen.
- "Blubberbox"... eigentlich ähnlich blubbo zeigt einen Text an...
- mehr kann er nicht.. und meckert natürlich über Befehle die er nicht kennt.
immerhin kann man den definierten Befehlen andere Parameter übergeben:
Mein.blubb:
blubbo ich bin irgendein Text
blubbo Das Ergebniss von 17 + 4 ist...
blubbadd 17 4
blubbo
blubbo Hallo Welt
blubbo Ich kann auch 96768 + 1044 berechnen......
blubbadd 96768 1044
blubbo
blubberbox Hallo winke winke...huhu
blubberbox Achnee , das isses...
blubbende programm
little_Dirty_parser.cmd
@echo off
rem seeeeehr simpler Parser ;) ...kennt nur 3 Befehle blubbo zeigt einee Zeile Text , blubbadd zeigt die summe von zwei integern...
rem und Blubberbox zeigt eine Messagebox...
for /f "usebackq tokens=1*" %%a in ("Mein.blubb") do (
rem %%a enthällt das erste token "den Befehl" %%b den Rest der Zeile
rem nachschauen ob das erste Token einen Bekannten Befehl enthält
rem ..wäre auch per f gegangen, ...aber ich habe gerade meine Find(ungs)-Phase ;)
echo %%a |find /i "blubbo" >nul &&(call :blubbo %%b & set "BefehlOK=1")
echo %%a |find /i "blubbadd" >nul &&(call :blubbadd %%b & set "BefehlOK=1")
echo %%a |find /i "blubberbox" >nul &&(call :blubberbox %%b & set "BefehlOK=1")
rem fehler Behandlung
if not defined BefehlOK (
echo unbekannter Befehl: "%%a"
)
rem erfolgsintikator zurücksetzen...
set "BefehlOK="
)
pause
exit /b
::Fall Behandlungs Subroutinen
:blubbo
echo:%*
exit /b
:blubbadd
set /a "_result=%1+%2"
echo %_result%
exit /b
:blubberbox
echo new ActiveXObject("wscript.shell").Popup ('%*',0,'BlubberBox',48)>"%temp%\blubbbox.js"
cscript /nologo "%temp%\blubbbox.js"
exit /b
machbar ist alles...
Natürlich ist das nur eine eine kleine Fingerübung und Eine MessageBox mit Batch auszugeben ist ohne Hilfe von JScript, VBScript oder anderen "Krücken" nicht möglich ...
ps:
Erstes Update...🤣🤣🤑
Parser auf eine Ausführungszeile eingedampft!
@echo off
for /f "usebackq tokens=1*" %%a in ("Mein.blubb") do (
echo %%a |findstr /i "blubbo blubbadd blubberbox" >nul &&(call :%%~a %%b)||(echo unbekannter Befehl: "%%a")
)
pause
exit /b
::Fall Behandlungs Subroutinen
:blubbo
echo:%*
exit /b
:blubbadd
set /a "_result=%1+%2"
echo %_result%
exit /b
:blubberbox
echo new ActiveXObject("wscript.shell").Popup ('%*',0,'BlubberBox',48)>"%temp%\blubbbox.js"
cscript /nologo "%temp%\blubbbox.js"
exit /b
Ich hatte noch etwas Zeit um mich mit der Kompatibilität zu Deiner Syntax? zu beschäftigen.
Im Prinzip das gleiche wie Oben, jedoch ist der Unterstrich der Delimiter, welcher den Befehl von den Daten trennt.
Ansonsten musste ich nur noch die Eckigen Klammern um die Parameter los werden... Sinn machen diese Irgendwie überhaupt nicht, aber ist Deine Sprache... und irgendwie ein unnützer Schritt... egal. so lernst Du gleich etwas Batch-For Artistik.
@echo off
for /f "usebackq tokens=1* delims=_" %%a in ("mein.casper") do (
echo %%a |findstr /i "mtc out" >nul &&(call :%%~a %%b)||(echo unbekannter Befehl: "%%a")
)
pause
exit /b
:mtc
rem Eckige Klammern entfernen
for /f "tokens=1 delims=[]" %%a in ("%*") do (
rem runde Klammern für Echo innerhalb eines Anweisungsblocks maskieren!
echo new ActiveXObject^("wscript.shell"^).Popup ^('%%a',0,'BlubberBox',48^)>"%temp%\blubbbox.js"
cscript /nologo "%temp%\blubbbox.js"
)
exit /b
:out
for /f "tokens=1 delims=[]" %%a in ("%*") do (
echo:%%~a
)
exit /b
mein .casper ?
out_[ Hallo Welt!]
out_[ ]
mtc_[Hello World!]
mtc_[Miese Welt!]
mtc_[zu Faul zum Antworten...?]
out_[nochmal in die Console schreiben !!!]
Hup
Palaver_[]
Schau Dir mal ClickEXE an.
Die haben so etwas ähnliches versucht.
Ich empfehle das man sich in die Windows 10 Powershell einarbeitet. Hier ein Tutorial: https://www.it-zeugs.de/powershell-einfuehrungstutorial.html
Damit kann man auch z.B. Windows Dialogboxen erstellen.
Und so wandelt man Powershell Skripte in EXE-Dateien um: https://www.itnator.net/powershell-zu-exe-konvertieren-howto/
Der Powershell gehört die Zukunft.