Batch "Return" Befehl?
Hallo,
ich habe folgendes Problem:
@ echo off
:Start
cls
echo Welcome to TestStart
pause
goto Game
:Tutorial1
cls
echo TestTutorial
pause
goto Game
:Tutorial2
cls
echo TestTutorial
pause
goto Game2
:Game
echo /N = Next - T = Tutorial\
set /p menu=
if "%menu%" == "N" goto Game2
if "%menu%" == "T" goto tutorial1
:Game2
echo /N = Next - T = Tutorial\
set /p menu=
if "%menu%" == "N" goto finish
if "%menu%" == "T" goto tutorial2
:finish
cls
echo Succesfull.
pause
exit
Grob ist das jetzt vereinfacht mein Problem, für jede neue Antwort müsste ich ein neues Tutorial schreiben. Leider hab ich keine Antwort darauf im Netz gefunden, die bei mir funktioniert hat. Vielen Dank!
2 Antworten
jede neue Antwort müsste ich ein neues Tutorial schreiben...
Musst du nicht ... 😉
dafür gibt es doch call :label und %Variablen% , welche ganze Befehlszeilen als Makro ausführen können.
demo1.cmd
@echo off
set "MeinMakro=echo ich bin ein Makro & pause"
call :meinLabel "ich bin ein Parameter" "ich bin noch ein" anderer...
echo zuruck im Hauptprogramm
%meinMakro%
echo hier ist das Hauptprogramm zu ende...
pause
exit /b
::: unterprogramme ::::
:meinLabel
echo ich bin jetz in der Subroutine %0
echo %1
echo %~2
echo %3
rem exit /b [optionale fehlernummer] entspricht einem Return
exit /b
hier wie meine Vorstellung von einem Menü wäre...
Menu.cmd
@ echo off
setlocal enableDelayedExpansion
chcp 65001 >nul & rem Umlaute erlauben
:Start
cls
echo Was darf's denn sein Fremder...
echo:
echo Welches Game möchtest du Spielen?
echo [C]alculator ^| Game [2]
echo [N]otepad ^| [S]chach
echo:
echo [X] Zum Beenden...
choice /n /c C2NSX
rem das hat schon fast einen Hauch von Objektorientiert ;)
if %errorlevel% equ 1 (
set "Game.Name=Calculator"
set "Game.Tutorial=Tut-!Game.Name!"
set "Game.Commandline=calc.exe"
)
if %errorlevel% equ 2 (
set "Game.Name=Game2"
set "Game.Tutorial=Tut-!Game.Name!"
set "Game.Commandline=echo Hier würde der Programmaufruf für !Game.Name! stehen &pause"
)
if %errorlevel% equ 3 (
set "Game.Name=Notepad"
set "Game.Tutorial=Tut-!Game.Name!"
set "Game.Commandline=Notepad.exe"
)
if %errorlevel% equ 4 (
set "Game.Name=Schach"
set "Game.Tutorial=Tut-!Game.Name!"
set "Game.Commandline=echo Hier würde der Programmaufruf für !Game.Name! stehen &pause"
)
if %errorlevel% equ 5 (
cls
echo Danke ^& Aufwiedersehen...
Timeout 4 >nul
exit /b
)
:Game
cls
echo Vor dem Spielen Tutorial für ### %Game.Name% ### anzeigen?
choice
if %errorlevel% equ 1 (
cls
call :%Game.Tutorial%
pause
)
%Game.Commandline%
rem zurück zum Menü
goto :Start
::::: Subroutinen :::::
:Tut-Calculator
call :Allgemeines
echo Gamespezifises. Rechnen
echo Tipp und Klick
call :danach
exit /b
:Tut-Game2
call :Allgemeines
echo Gamespezifises. gaag
echo Put put...Klick
call :danach
exit /b
:Tut-Notepad
call :Allgemeines
echo Gamespezifises. Schreibsel
echo Lorem Ipsum...Klick
call :danach
exit /b
:Tut-Schach
call :Allgemeines
echo Gamespezifises. Teile und herrsche
echo Muh und mähhKlick
call :danach
exit /b
:Allgemeines
echo ich werde am Begin von allen Tutpoorials angezeigt...
echo:
echo Blahhh ^& Blubbbb
echo:
exit /b
:danach
echo ich komme überall hinterher...
echo tschüß...
exit /b
Im Prinzip musst Du zum Erweitern nichts weiter Tun als bei choice die Buchstabenliste anzupassen/erweitern.
Für jede Auswahltaste ein Weitere if %errorlevel%-Abfrage nach gleichem Muster... und ein passendes ":Tut-Label" Einrichten...
Ich verstehe absolut nicht was das machen soll.
Kannst du bitte erklären was du damit bewerkstelligen willst?
Dann denk dir doch einfach eine neue Variable aus die du dafür nutzt.
Bei jedem "Game" setzt du als erstes die entsprechende Variable, z.B.
@ echo off
:Start
cls
echo Welcome to TestStart
pause
goto Game
:Tutorial
cls
echo TestTutorial
pause
goto %currentgame%
:Game
set currentgame=Game
echo /N = Next - T = Tutorial\
set /p menu=
if "%menu%" == "N" goto Game2
if "%menu%" == "T" goto tutorial
:Game2
set currentgame=Game2
echo /N = Next - T = Tutorial\
set /p menu=
if "%menu%" == "N" goto finish
if "%menu%" == "T" goto tutorial
:finish
cls
echo Succesfull.
pause
exit
Übrigens: Beim schreiben einer Frage/Kommentar hast du die Möglichkeit bei der Formatierung "Quelltext" anzuklicken. Am besten packst du dort solchen Code rein, als normaler Text sieht das eher unschön aus.
Hab deine Frage mal entsprechend bearbeitet.
Btw, bei der IF-Abfrage kannst du dir das Hochkomma sparen.
Habe gerade zufällig diese Frage wieder gefunden.
Ich bin dumm, das Hochkomma hat schon seinen Sinn...
Das ist grob vereinfacht. Ich will nur, dass ich nicht 20 :tutorial erstellen muss sondern eins was man immer nutzen kann. Ein Return befehl zur letzten variable wo man war