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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 665481
Url: https://administrator.de/contentid/665481
Ausgedruckt am: 24.11.2024 um 15:11 Uhr
8 Kommentare
Neuester Kommentar
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?
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?
Moin,
und wieso postet man eine mehr als unfreundliche Antwort, die darüber hinaus noch überhaupt keinen Sinn ergibt?
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.
Netiquette beachten!
Gruß Thomas
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.und wieso sollte man das machen wollen? Sprungmarken sind nicht ohne Grund verpönt. Was spricht denn dagegen das ganze mittels Funktionen zulösen?
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
Zitat von @TK1987:
Moin,
Gruß Thomas
Kleine Korrektur für seine Anforderung das bei anderen Wertem als start1 und start2 direkt zum Ende gesprungen werden sollMoin,
@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
@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
Hi Thomas,
danke für den Hinweis ich werde versuchen meine zukünftigen Antworten besser zu formulieren:
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:
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:
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%
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.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:
Dreimal darfst du raten, warum es diese in Powershell nicht gibt.
Weil jede moderne Sprache Modualisierung beherrschen sollte, was Batch jedoch ohnehin nicht kann.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.