freshman2017
Goto Top

Batch Sprungmarke aus .csv File

Guten Tag liebe Gemeinde,

in einem Batch Skript möchte ich gerne mit einer Sprungmarke (goto) arbeiten.

Wenn in der 3. Spalte einer einzeiligen .csv „start1“ steht, soll er zu start1 springen, wenn da „start2“ steht, dann zu start2 springen, sonst zum :ende.

Wie kann ich mit Variabeln aus einer Textdatei für die If- Anweisung arbeiten?

Beste Grüße

@echo off

:start1

echo start1 erfolgreich!

goto ende 

:start2

echo start2 erfolgreich!

goto ende

:ende 

PAUSE

Content-Key: 665481

Url: https://administrator.de/contentid/665481

Printed on: April 19, 2024 at 10:04 o'clock

Member: mhaendler
mhaendler Apr 07, 2021 updated at 12:36:03 (UTC)
Goto Top
Hi, wieso sollte man das machen wollen? Sprungmarken sind nicht ohne Grund verpönt. Was spricht denn dagegen das ganze mittels Funktionen zulösen?

Wenn in der 3. Spalte einer einzeiligen .csv „start1“ steht, soll er DIE FUNKTION start1 aufrufen, wenn da „start2“ steht, dann die Funktion start2 aufrufen, ansonsten die Funktion :ende bzw. das Skript beenden?

Was ist denn nun eigentlich deine genaue Frage? Möchtest du nun mit einer CSV Datei arbeiten oder doch mit einer TXT Datei? Wie sieht dein Code bisher aus und wo hängst du denn aktuell / kommst nicht weiter?
Member: TK1987
Solution TK1987 Apr 07, 2021 updated at 11:57:06 (UTC)
Goto Top
Moin,

@echo off
for /f "Tokens=3 usebackq Delims=;" %%A in ("C:\Test\Datei.CSV") do goto %%A  

:start1
echo start1 erfolgreich!
pause
goto :EoF

:start2
echo start2 erfolgreich!
pause
goto :EoF

:start3
echo start3 erfolgreich!
pause
goto :EoF

Gruß Thomas
Member: TK1987
TK1987 Apr 07, 2021 updated at 12:22:48 (UTC)
Goto Top
Moin,

und wieso postet man eine mehr als unfreundliche Antwort, die darüber hinaus noch überhaupt keinen Sinn ergibt?
Zitat von @mhaendler:
und wieso sollte man das machen wollen? Sprungmarken sind nicht ohne Grund verpönt. Was spricht denn dagegen das ganze mittels Funktionen zulösen?
Dagegen spricht zum Beispiel, dass es bei Batch keine Funktionen gibt, sowas wird dort anders gelöst... lass mich überlegen... ach ja: mit Sprungmarken.
Man könnte jetzt meinen du weist hier auf Powershell hin - ergibt allerdings auch keinen Sinn, denn dort sind Sprungmarken nicht verpönt, es gibt sie schlicht nicht.
Was ist denn nun eigentlich deine genaue Frage? Möchtest du nun mit einer CSV Datei arbeiten oder doch mit einer TXT Datei?
Die Frage ist durchaus plausibel dargestellt.
Wie sieht dein Code bisher aus und wo hängst du denn aktuell / kommst nicht weiter?
Steht doch oben.

Netiquette beachten!

Gruß Thomas
Mitglied: 148121
Solution 148121 Apr 07, 2021 updated at 12:50:40 (UTC)
Goto Top
Zitat von @TK1987:

Moin,

@echo off
> for /f "Tokens=3 usebackq Delims=;" %%A in ("C:\Test\Datei.CSV") do goto %%A  
> 
> :start1
> echo start1 erfolgreich!
> pause
> goto :EoF
> 
> :start2
> echo start2 erfolgreich!
> pause
> goto :EoF
> 
> :start3
> echo start3 erfolgreich!
> pause
> goto :EoF

Gruß Thomas
Kleine Korrektur für seine Anforderung das bei anderen Wertem als start1 und start2 direkt zum Ende gesprungen werden soll
@echo off
for /f "Tokens=3 usebackq Delims=;" %%A in ("C:\Test\Datei.CSV") do (  
    if "%%A" == "start1" goto %%A  
    if "%%A" == "start2" goto %%A  
    goto ende
)
goto ende

:start1
echo start1 erfolgreich!
goto ende

:start2
echo start2 erfolgreich!
goto ende

:ende
pause
Member: mhaendler
mhaendler Apr 07, 2021 at 13:01:18 (UTC)
Goto Top
Hi Thomas,

danke für den Hinweis ich werde versuchen meine zukünftigen Antworten besser zu formulieren:

Dagegen spricht zum Beispiel, dass es bei Batch keine Funktionen gibt, sowas wird dort anders gelöst... lass mich überlegen... ach ja: mit Sprungmarken.

Leider hast du da nicht ganz recht, in Batch gibt es sehr wohl Funktionen. Mit CALL kann man entsprechend definierte Funktionen aufrufen und diesen sogar Parametern übergeben, wie in diesem Beispiel:
@echo off

CALL :testfunction "Hello, Administrator.de!"  

pause
EXIT /B %ERRORLEVEL%

:testfunction
ECHO %* >> "%log%"  
ECHO %*
EXIT /B 0

Man könnte jetzt meinen du weist hier auf Powershell hin - ergibt allerdings auch keinen Sinn, denn dort sind Sprungmarken nicht verpönt, es gibt sie schlicht nicht.

Dreimal darfst du raten, warum es diese in Powershell nicht gibt. Genau so wurde in Java der GoTo Befehl nicht umgesetzt. Muss man hier natürlich auch erwähnen, dass beispielsweise im Linux-Kernel durch GoTos die Lesbarkeit erhöht wurde.

@thomas danke!
Ich würde dir allerdings abraten, anhand des Befehls eine entsprechende Sprungmarke aufzusuchen. Sie dir beispielsweise PowerShell an, diese bietet einfach mittlerweile schon Erneuerung und Möglichkeiten die du bei Batch nicht hast.

Ich kanns leider gerade nicht testen aber so ungefähr müsste es gehen:

set testVar=%%A
goto %testVar%
Member: TK1987
TK1987 Apr 07, 2021 updated at 13:08:24 (UTC)
Goto Top
Zitat von @mhaendler:
Leider hast du da nicht ganz recht, in Batch gibt es sehr wohl Funktionen. Mit CALL kann man entsprechend definierte Funktionen aufrufen und diesen sogar Parametern übergeben, wie in diesem Beispiel:
Mit CALL rufst du ebenfalls eine Sprungmarke auf. Der einzige Unterschied zwischen GOTO und CALL ist lediglich, das CALL wieder zum Ausgangspunkt zurück kehrt, sobald es am Ende des Skripts angekommen ist, während GOTO einmal hinspringt und dort bleibt.
Dreimal darfst du raten, warum es diese in Powershell nicht gibt.
Weil jede moderne Sprache Modualisierung beherrschen sollte, was Batch jedoch ohnehin nicht kann.
Member: mhaendler
mhaendler Apr 07, 2021 at 14:28:50 (UTC)
Goto Top
Mit CALL rufst du ebenfalls eine Sprungmarke auf. Der einzige Unterschied zwischen GOTO und CALL ist lediglich, das CALL wieder zum Ausgangspunkt zurück kehrt, sobald es am Ende des Skripts angekommen ist, während GOTO einmal hinspringt und dort bleibt.

Das ist falsch, mit Call rufst du eine Funktion auf der du Parameter übergeben kannst, was in Batch zwar die gleiche Schreibweise hat, aber per Definition kann man einer Sprungmarke keine Parameter übergeben. Einer Funktion eben schon. Sonst würde es ja nicht den unterschied zwischen CALL und GOTO geben.

Weil jede moderne Sprache Modualisierung beherrschen sollte, was Batch jedoch ohnehin nicht kann.
Naja Batch ist auch mittlerweile über 30 Jahre alt. Das ist ja das schöne an Technik der ständige Fortschritt, es wird immer neue Sachen geben und alte Sprachen / schlechte Umsetzung wird nach und nach vergessen. Weshalb es umso wichtiger ist, den Leuten direkt zu vermitteln, dass Sie auf neuere Tool umsteigen sollen (Adé Batch, Hallo PowerShell).

Und wir als Forum sollten Jüngeren, ggf. Unwissenden direkt darauf aufmerksam machen, dass es ratsam ist, nicht alte Sprachen zu verwenden, sondern direkt die Probleme mit den entsprechenden "neuen" Tools zu verwenden. Wobei PowerShell dieses Jahr auch schon 15 Jahre alt wird.
Member: freshman2017
freshman2017 Apr 07, 2021 at 16:01:41 (UTC)
Goto Top
Vielen lieben Dank für die Kommentare und die Hilfestellung 👍