Batch "Return" Befehl?

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...

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Ich verstehe absolut nicht was das machen soll.

Kannst du bitte erklären was du damit bewerkstelligen willst?

21Konstantin12 
Fragesteller
 01.10.2019, 20:36

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

0
DominikPrinz  01.10.2019, 20:41
@21Konstantin12

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
0
DominikPrinz  01.10.2019, 20:45
@DominikPrinz

Ü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.

2
DominikPrinz  17.06.2020, 14:31
@DominikPrinz

Habe gerade zufällig diese Frage wieder gefunden.

Ich bin dumm, das Hochkomma hat schon seinen Sinn...

0