String mit variabler Länge auslesen
Hallo Ihr Lieben,
ich stehe vor folgendem Problem:
Ich möchte einen String aus einer Datei einen auslesen, der in Anführungszeichen steht. Also z.B.
Das >Heute ist< ist immer da, der Name/String ändert sich allerdings immer in Inhalt und Länge.
Und das >Marion< hätte ich gerne als Variable in einer Batch.
So nun weiß ich dass hier mir jemand wahrscheinlich eine Lösung mit tokens und delims aufzeigt - sofern mein Problem überhaupt lösbar ist - ich bitte aber auch um Erklärung, weil ich diese for /f - Schleifen und tokens und delims einfach nicht in meinen Schädel bringen will wie das funktioniert.
Besten Dank!
ich stehe vor folgendem Problem:
Ich möchte einen String aus einer Datei einen auslesen, der in Anführungszeichen steht. Also z.B.
Heute ist "Marion" dran
Das >Heute ist< ist immer da, der Name/String ändert sich allerdings immer in Inhalt und Länge.
Und das >Marion< hätte ich gerne als Variable in einer Batch.
So nun weiß ich dass hier mir jemand wahrscheinlich eine Lösung mit tokens und delims aufzeigt - sofern mein Problem überhaupt lösbar ist - ich bitte aber auch um Erklärung, weil ich diese for /f - Schleifen und tokens und delims einfach nicht in meinen Schädel bringen will wie das funktioniert.
Besten Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 86134
Url: https://administrator.de/contentid/86134
Ausgedruckt am: 22.11.2024 um 03:11 Uhr
3 Kommentare
Neuester Kommentar
ich bitte aber auch um Erklärung, weil ich diese for /f - Schleifen und tokens und delims
einfach nicht in meinen Schädel bringen will wie das funktioniert.
einfach nicht in meinen Schädel bringen will wie das funktioniert.
Dazu druckst du dir Text in der Windows-Hilfe zum Suchbegriff "for" am besten einmal aus und liest das in eine ruhigen Stunde mal durch. Eigentlich ist das ganz gut erklärt.
Ausprobieren an selbst erzeugten Textdateien mit selbst zusammengefummelten Befehlszeilen ist m. E. immer noch der sicherste Weg zum Verständnis.
Hallo crazyhoesl!
Dem Vorschlag von nachdenker schließe ich mich an ...
Zu diesem konkreten Fall kann ich Dich aber schon mal etwas beruhigen: es geht auch ohne die Angabe von "delims" - dies allerdings nur, wenn zwischen den Anführungszeichen tatsächlich immer nur ein Wort steht, da in diesem Fall das defaultmäßige Trennzeichen (engl. "delimiter") "Leerzeichen" verwendet werden kann:
Aufgrund der Trennung durch Leerzeichen ist der gesuchte String der 3. Bestandteil ("token") der Zeile, und dieser steht zunächst als %%i zur Verfügung. Allerdings enthält diese Variable auch noch die umschließenden Anführungszeichen, welche durch die Schreibweise %%~i entfernt werden.
Grüße
bastla
Dem Vorschlag von nachdenker schließe ich mich an ...
Zu diesem konkreten Fall kann ich Dich aber schon mal etwas beruhigen: es geht auch ohne die Angabe von "delims" - dies allerdings nur, wenn zwischen den Anführungszeichen tatsächlich immer nur ein Wort steht, da in diesem Fall das defaultmäßige Trennzeichen (engl. "delimiter") "Leerzeichen" verwendet werden kann:
for /f "tokens=3" %%i in (Datei.txt) do set "Name=%%~i"
Grüße
bastla
sollte die Anforderung allerdings irgendwann dahingehend geändert werden,
dass wirklich ein "String in Anführungszeichen" an beliebiger Position innerhalb einer Zeile gesucht werden soll,
dann ist es lesbarer, als DELIMS etwas anders als Anführungszeichen zu verwenden.
Beispiel (nur am CMD-Prompt):
Wenn diese (eine) Zeile aus einer Datei gelesen werden soll, dann muss vorher %line% gesetzt werden mit
Grüße
Biber
dass wirklich ein "String in Anführungszeichen" an beliebiger Position innerhalb einer Zeile gesucht werden soll,
dann ist es lesbarer, als DELIMS etwas anders als Anführungszeichen zu verwenden.
Beispiel (nur am CMD-Prompt):
>set "line=Heute ist "Klaus Maria" dran."
>set line
line=Heute ist "Klaus Maria" dran.
>FOR /F "delims=§ tokens=2" %i in ("%line:"=§%") do @echo Name: [%i]
Name: [Klaus Maria]
Wenn diese (eine) Zeile aus einer Datei gelesen werden soll, dann muss vorher %line% gesetzt werden mit
>FOR /F "delims=" %i in (DranIs.txt) do set "line=%i"
-oder-
Set /P line=<DranIs.txt
Grüße
Biber