
62544
07.03.2008, aktualisiert am 11.03.2008
Datei nach Zeichenfolge durchsuchen und Wert zurückgeben
Batchprogrammierung (möglichst ohne zusätzliche Tools)
Hallo zusammen,
ich habe folgendes Anliegen:
Ich möchte mit einer Batchdatei (möglichst ohne zusätzlich Tools, sondern alles mit Standart Windows XP Mitteln) eine Datei auslesen.
Die Datei hat viele Zeilen. Eine Zeile könnte z.B. folgendermassen aussehen:
CVE:DEV,2OG,SPEZ;
Der Doppelpunkt trennt das Schlüsselwort (CVE) vom Rest. Das Komma trennt die verschiedene Argumente. Das Semikolon schliesst eine Zeile ab.
Nun bekomme ich in der Batchdatei das Schlüsselwort (hier CVE). Dann soll mir der Batch diese Zeile (und NUR diese) nach den Argumenten (DEV,2OG,SPEZ) durchsuchen. Jedes Argument soll in einer seperaten Variable gespeichert werden.
Also ich suche nach CVE und bekomme in der Variablen %1% das Argument DEV, in %2% 2OG und in %3% SPEZ.
Wie kann ich das machen?
Wenn ich nur eine Zeile hätte, könnte ich bestimmt mit einer FOR Schleife und Tokens und Delims etc. was machen.... aber wie bringe ich ihn dazu, genau in dieser Zeile die Daten zurückzugeben, welche das korrekte Schlüsselwort enthält?
Vielen Dank für Eure Unterstützung!
Grüsse
Staticip
Hallo zusammen,
ich habe folgendes Anliegen:
Ich möchte mit einer Batchdatei (möglichst ohne zusätzlich Tools, sondern alles mit Standart Windows XP Mitteln) eine Datei auslesen.
Die Datei hat viele Zeilen. Eine Zeile könnte z.B. folgendermassen aussehen:
CVE:DEV,2OG,SPEZ;
Der Doppelpunkt trennt das Schlüsselwort (CVE) vom Rest. Das Komma trennt die verschiedene Argumente. Das Semikolon schliesst eine Zeile ab.
Nun bekomme ich in der Batchdatei das Schlüsselwort (hier CVE). Dann soll mir der Batch diese Zeile (und NUR diese) nach den Argumenten (DEV,2OG,SPEZ) durchsuchen. Jedes Argument soll in einer seperaten Variable gespeichert werden.
Also ich suche nach CVE und bekomme in der Variablen %1% das Argument DEV, in %2% 2OG und in %3% SPEZ.
Wie kann ich das machen?
Wenn ich nur eine Zeile hätte, könnte ich bestimmt mit einer FOR Schleife und Tokens und Delims etc. was machen.... aber wie bringe ich ihn dazu, genau in dieser Zeile die Daten zurückzugeben, welche das korrekte Schlüsselwort enthält?
Vielen Dank für Eure Unterstützung!
Grüsse
Staticip
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 82585
Url: https://administrator.de/forum/datei-nach-zeichenfolge-durchsuchen-und-wert-zurueckgeben-82585.html
Ausgedruckt am: 30.04.2025 um 17:04 Uhr
7 Kommentare
Neuester Kommentar
Hallo Staticip und willkommen im Forum!
Soferne die Anzahl an Argumenten (mit 3) festgelegt ist, kannst Du es etwa so versuchen:
Im Unterprogramm "Verarbeite" kommen die Argumente (fast) wie gewünscht als %1 bis %3 an, stehen allerdings (zur Sicherheit) unter Anführungszeichen - letztere kannst Du entweder (weil ohnehin gar nicht benötigt) gleich beim "call" weglassen, oder durch die Schreibweise %~1 eliminieren.
Grüße
bastla
Soferne die Anzahl an Argumenten (mit 3) festgelegt ist, kannst Du es etwa so versuchen:
@echo off & setlocal
set "Datei=Z:\Datei.txt"
set "Such=CVE"
for /f "tokens=1,2,* delims=:;" %%i in ('findstr "%Such%" "%Datei%"') do for /f "tokens=1-3 delims=," %%a in ("%%j") do call :Verarbeite "%%a" "%%b" "%%c"
goto :eof
:Verarbeite
echo %%1 (erstes Argument )=%1 bzw %~1
echo %%2 (zweites Argument)=%2 bzw %~2
echo %%3 (drittes Argument)=%3 bzw %~3
::
:: was so anliegt
::
goto :eof
Grüße
bastla
Hallo Staticip!
Manchmal dauert's lang, dann auch wieder länger ...
... aber jetzt kommen doch noch ein paar Anmerkungen zu den verwendeten "for"-Schleifen:
Zerlege die sich aus der folgenden Klammer ergebenden Output-Zeilen, indem jeder ":" und jedes ";" als Trennzeichen betrachtet werden (letzteres ist nur angegeben, um es aus dem Ergebnis zu entfernen), allerding so, dass nur 3 Teile (= "tokens"), nämlich: 1. Teil = vor erstem Trennzeichen; 2. Teil ist zwischen erstem und zweitem Trennzeichen; 3. Teil ist alles nach dem zweiten Trennzeichen ohne weitere Zerlegung, entstehen. Diese Teile werden in den Variablen %%i, %%j und %%k zur Verfügung gestellt. (Falls Du meinst, "tokens=2" hätte auch genügt, da ja in weiterer Folge ohnehin nur der entsprechende Teil interessiert, hast Du recht
...)
Der Teil in der Klammer dient dazu, aus der Datei "%Datei%" alle Zeilen, welche den Suchbegriff "%Such%" enthalten, herauszufiltern und für die oben erklärte Aufteilung zur Verfügung zu stellen.
Das wird Dir jetzt schon bekannt vorkommen, hier geht es ebenfalls um 3 Teile, allerdings nur bis zum dritten Trennzeichen (in diesem Fall ",") - ein sich dahinter befindlicher Rest würde nicht berücksichtigt. Als Variablennamen der Teile werden hier %%a bis %%c verwendet.
Zerlegt werden soll in diesem Fall der zweite Teil aus der ersten "for"-Schleife (also %%j), und das Ergebnis soll in einem Unterprogramm ":Verarbeite" weiter behandelt werden. Dazu werden beim Unterprogrammaufruf die Inhalte der Variablen %%a bis %%c mit übergeben. Das Unterprogramm selbst verhält sich wie ein (weiterer / externer) Batch, sodass dort die übergebenen Parameter als %1 bis %3 ankommen und weiter verarbeitet werden können (wahlweise mit umgebenden Anführungszeichen oder, durch die Schreibweise %~1, ohne erstere).
Der Ablauf der ganzen Konstruktes sollte also sein: Finde alle Zeilen mit "CVE", zerlege diese in die Teile (am Beispiel von "CVE:DEV,2OG,SPEZ;") "CVE", "DEV,2OG,SPEZ" und was noch nach dem ";" käme (also eigentlich nix mehr), verarbeite "DEV,2OG,SPEZ" (als %%j) weiter, indem dieses anhand der "," in die Teile "DEV", "2OG" und "SPEZ" geteilt wird und "liefere" diese 3 Teile an das Unterprogramm, um dort etwas (hoffentlich
) Sinnvolles damit anstellen zu können.
Grüße
bastla
Manchmal dauert's lang, dann auch wieder länger ...
... aber jetzt kommen doch noch ein paar Anmerkungen zu den verwendeten "for"-Schleifen:
for /f "tokens=1,2,* delims=:;" %%i ...
... in ('findstr "%Such%" "%Datei%"') ...
... do for /f "tokens=1-3 delims=," %%a ...
... in ("%%j") do call :Verarbeite "%%a" "%%b" "%%c"
Der Ablauf der ganzen Konstruktes sollte also sein: Finde alle Zeilen mit "CVE", zerlege diese in die Teile (am Beispiel von "CVE:DEV,2OG,SPEZ;") "CVE", "DEV,2OG,SPEZ" und was noch nach dem ";" käme (also eigentlich nix mehr), verarbeite "DEV,2OG,SPEZ" (als %%j) weiter, indem dieses anhand der "," in die Teile "DEV", "2OG" und "SPEZ" geteilt wird und "liefere" diese 3 Teile an das Unterprogramm, um dort etwas (hoffentlich
Grüße
bastla
Hallo Staticip!
...
... aber eigentlich sollte es trotzdem funktionieren.
Wie sieht denn die entsprechende Zeile aus und wie lautet die Fehlermeldung? Schau Dir auch einmal an (indem Du "echo off" auf "echo on" änderst und natürlich den Batch von der Kommandozeile startest), wie diese Zeile interpretiert wird (und vor allem, was für die Variable %Datei% eingesetzt wird).
Grüße
bastla
In meinem Pfad gibt's ein Kaufmännisches Und (&)
Wer macht denn sowas ... aber eigentlich sollte es trotzdem funktionieren.
Wie sieht denn die entsprechende Zeile aus und wie lautet die Fehlermeldung? Schau Dir auch einmal an (indem Du "echo off" auf "echo on" änderst und natürlich den Batch von der Kommandozeile startest), wie diese Zeile interpretiert wird (und vor allem, was für die Variable %Datei% eingesetzt wird).
Grüße
bastla