Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Datei nach Zeichenfolge durchsuchen und Wert zurückgeben

Mitglied: 62544

62544 (Level 1)

07.03.2008, aktualisiert 11.03.2008, 5751 Aufrufe, 7 Kommentare

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
Mitglied: bastla
07.03.2008 um 22:44 Uhr
Hallo Staticip und willkommen im Forum!

Soferne die Anzahl an Argumenten (mit 3) festgelegt ist, kannst Du es etwa so versuchen:
01.
@echo off & setlocal 
02.
set "Datei=Z:\Datei.txt" 
03.
set "Such=CVE" 
04.
 
05.
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" 
06.
goto :eof 
07.
 
08.
:Verarbeite 
09.
echo %%1 (erstes Argument )=%1 bzw %~1 
10.
echo %%2 (zweites Argument)=%2 bzw %~2 
11.
echo %%3 (drittes Argument)=%3 bzw %~3 
12.
:: 
13.
:: was so anliegt 
14.
:: 
15.
goto :eof
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
Bitte warten ..
Mitglied: 62544
08.03.2008 um 17:38 Uhr
Hey, vielen Dank für die rasche Antwort! Leider kann ich das nicht gleich testen, aber ich versuche es die nächsten Tage mal! Danke vielmal!
Leider bin ich jetzt auf anhieb nicht so ganz schlau geworden aus der ganzen For Struktur, aber vielleicht hast du mir noch eine kleine Erklärung dazu. Und sonst melde ich mich bei Fragen wieder.

Grüsse
Staticip
Bitte warten ..
Mitglied: bastla
10.03.2008 um 18:18 Uhr
Hallo Staticip!

Manchmal dauert's lang, dann auch wieder länger ...

... aber jetzt kommen doch noch ein paar Anmerkungen zu den verwendeten "for"-Schleifen:

01.
for /f "tokens=1,2,* delims=:;" %%i ...
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 ...)

01.
 ... in ('findstr "%Such%" "%Datei%"') ...
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.

01.
... do for /f "tokens=1-3 delims=," %%a ...
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.

01.
... in ("%%j") do call :Verarbeite "%%a" "%%b" "%%c"
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
Bitte warten ..
Mitglied: 62544
10.03.2008 um 20:28 Uhr
Hallo bastla,

vielen Dank für Deine ausführliche Antwort!
Nun komme sogar ich draus

Und endlich habe ich Dein Script zum laufen gebracht..... Ich habe hin und her probiert. Aber nichts lief. Bis ich dann endlich herausgefunden habe, dass Findstr Gross und Kleinschreibung unterscheidet!

(Aber mit dem Schalter /I kann man das abfangen!)


Besten Dank nochmals!

Grüsse
Staticip
Bitte warten ..
Mitglied: 62544
10.03.2008 um 20:31 Uhr
Und leider gleich nochmals eine Frage:
In meinem Pfad gibt's ein Kaufmännisches Und (&)
Das verursacht Probleme mit findstr.

Trotz den Anführungszeichen. Kann man das auch umgehen?

Beste Grüsse
Staticip
Bitte warten ..
Mitglied: bastla
10.03.2008 um 22:06 Uhr
Hallo Staticip!

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
Bitte warten ..
Mitglied: 62544
11.03.2008 um 21:14 Uhr
Hallo bastla,

leider habe ich im Moment keine Zeit, das Script nochmals nach Fehler zu durchforsten.... muss etwas warten.
Die Fehlermeldung ist etwa: Kann Datei XYZ nicht öffnen. (Beim Befehl findstr)
Der Pfad stimmt mit dem &!

Er sagt, "....nicht öffnen" und nicht "nicht gefunden"....
Naja, ich muss später wieder mal basteln!

Besten Dank!
Grüsse
Staticip
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
XML nach Liste mit Werten durchsuchen
Frage von bockerBatch & Shell12 Kommentare

Guten Morgen. Ich habe folgendes Problem: Ich habe eine XML Datei mit etlichen Angaben die ca 30.000 Datensätze hat. ...

Microsoft Office

Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen

Frage von krischaniiMicrosoft Office1 Kommentar

Hallo und Danke für Eure stets guten Antworten und Hilfen! Folgendes Problem habe ich: Win 8.1 - Office2013 Ich ...

Microsoft Office

Excel Dateien durchsuchen und mehrere Werte in neue Excel Datei auslesen

Frage von CollatusMicrosoft Office7 Kommentare

Hallo zusammen, im Forum bin ich schon auf einen guten Ansatz gestoßen der mir schon sehr weiter Hilft aber ...

Windows 10

Zeichenfolge in .reg Datei schreiben (Registry)

gelöst Frage von MedicalAdWindows 104 Kommentare

Guten Morgen, ich habe folgendes Problem, ich muss in einen bestimmten Pfad eine Zeichenfolge schreiben. Nur bekomme ich es ...

Neue Wissensbeiträge
SAN, NAS, DAS
QNAP NAS Datenschutz-Loop nach Firmware-Update
Tipp von vanTast vor 25 MinutenSAN, NAS, DAS

Moin, im allgemeinen Trend seine geänderten Datenschutzbedingungen den Kunden zukommen zu lassen kam die Firma QNAP auf die glorreiche ...

Datenschutz
DSGVO Datenschutzgesetz
Anleitung von 1Werner1 vor 1 StundeDatenschutz4 Kommentare

Moin, ja was ist das, da ist die DSGVO Datenschutzverordnung. Wie das Gesetz gibt es schon 2 Jahre? Nun ...

CPU, RAM, Mainboards
Neverending story
Tipp von keine-ahnung vor 1 TagCPU, RAM, Mainboards1 Kommentar

Da kommt man mit dem fixen gar nicht mehr hinterher und die CPU erreichen wieder Rechenleistungen im Bereich des ...

Multimedia & Zubehör
AVM Fritz USB WLAN Sticks schneller einschalten
Tipp von NetzwerkDude vor 2 TagenMultimedia & Zubehör4 Kommentare

Die AVM Fritz WLAN Sticks haben in der Firmware 2 Modis: Einmal als Massenspeicher und einmal als WLAN Netzwerkkarte ...

Heiß diskutierte Inhalte
PHP
Nach Umzug zu 1und1 bekomme ich beim Eintrag in die DB Tabelle folgenden Fehler
gelöst Frage von jensgebkenPHP35 Kommentare

INSERT command denied to user 'dbo45342345342231244'@'112.127.102.073' for table 'orders'

Windows Userverwaltung
Problem mit Benutzerprofil
Frage von lieferscheinWindows Userverwaltung24 Kommentare

Guten Tag liebe Community, folgendes Problem habe ich: User meldet sich auf Client A an - sein Homelaufwerk verbindet. ...

LAN, WAN, Wireless
Powerline über zwei Stockwerke optimieren
Frage von DultusLAN, WAN, Wireless21 Kommentare

Guten Morgen liebes Forum, ich hätte einmal eine Frage bezüglich Powerline Adapter: Mein Problem ist seit gestern präsent, da ...

Rechtliche Fragen
DSGVO - Impressum und Datenschutz auf Anmeldeseiten notwendig?
Frage von StefanKittelRechtliche Fragen20 Kommentare

Hallo, was mit gerade eingefallen ist. Muss man auf Anmeldeseiten auch ein Impressum und Datenschutzhinweis haben? Auch hier wird ...