Batch - Bestimmte Zeile(n) aus Textdatei auch bei Mehrfachvorkommen in Variable übertragen
Hallo mitsammen,
Ich bin neu im Forum und habe ganz wenig batch-Kenntnisse.
Ich möchte aus der Datei nodeinfo.txt
alle (oder zumindest die 1.) Zeilen die "DESCRIPTION"
und NICHT "INTERFACE DESCRIPTION" enthalten
in Variablen schreiben.
Die Zeilen die so in dieser Datei vorkommen:
H:\>find "DESCRIPTION" C:\NNM_TEMP\Mail\nodeinfo.txt
C:\NNM_TEMP\MAIL\NODEINFO.TXT
DESCRIPTION: Cisco Internetwork Operating System Software
DESCRIPTION: IOS (tm) C2950 Software (C2950-I6Q4L2-M), Version 12.1(22)EA2, RELEASE SOFTWARE (fc1)
DESCRIPTION: Copyright (c) 1986-2004 by cisco Systems, Inc.
DESCRIPTION: Compiled Sun 07-Nov-04 23:14 by antonino
INTERFACE DESCRIPTION: Vlan999
INTERFACE DESCRIPTION: FastEthernet0/1
INTERFACE DESCRIPTION: FastEthernet0/2
INTERFACE DESCRIPTION: FastEthernet0/3
INTERFACE DESCRIPTION: FastEthernet0/4
INTERFACE DESCRIPTION: FastEthernet0/5
INTERFACE DESCRIPTION: FastEthernet0/6.........
Ich habe folgendes probiert:
FOR /F "delims=xxx" %%B IN ('FIND "DESCRIPTION:" "C:\NNM_TEMP\Mail\nodeinfo.txt"') DO SET VAR_Description=%%B
Das bringt mir immer das LETZTE Vorkommen einer Zeile mit "DESCRITPION" (also INTERFACE DESCRIPTION: ....) zurück.
Ich möchte aber, dass zumindest das ERSTE Vorkommen einer Zeile mit "DESCRITPION" zurück.
Gibt es da eine Möglichkeit bei FOR oder FIND ?
(Habe mich auch ein wenig mit dem FOR Attribut "skip" beschäftigt, mache da aber wohl was falsch.)
Oder was kann ich probieren ?
Vielen Dank im Voraus für eine Info
souley
Ich bin neu im Forum und habe ganz wenig batch-Kenntnisse.
Ich möchte aus der Datei nodeinfo.txt
alle (oder zumindest die 1.) Zeilen die "DESCRIPTION"
und NICHT "INTERFACE DESCRIPTION" enthalten
in Variablen schreiben.
Die Zeilen die so in dieser Datei vorkommen:
H:\>find "DESCRIPTION" C:\NNM_TEMP\Mail\nodeinfo.txt
C:\NNM_TEMP\MAIL\NODEINFO.TXT
DESCRIPTION: Cisco Internetwork Operating System Software
DESCRIPTION: IOS (tm) C2950 Software (C2950-I6Q4L2-M), Version 12.1(22)EA2, RELEASE SOFTWARE (fc1)
DESCRIPTION: Copyright (c) 1986-2004 by cisco Systems, Inc.
DESCRIPTION: Compiled Sun 07-Nov-04 23:14 by antonino
INTERFACE DESCRIPTION: Vlan999
INTERFACE DESCRIPTION: FastEthernet0/1
INTERFACE DESCRIPTION: FastEthernet0/2
INTERFACE DESCRIPTION: FastEthernet0/3
INTERFACE DESCRIPTION: FastEthernet0/4
INTERFACE DESCRIPTION: FastEthernet0/5
INTERFACE DESCRIPTION: FastEthernet0/6.........
Ich habe folgendes probiert:
FOR /F "delims=xxx" %%B IN ('FIND "DESCRIPTION:" "C:\NNM_TEMP\Mail\nodeinfo.txt"') DO SET VAR_Description=%%B
Das bringt mir immer das LETZTE Vorkommen einer Zeile mit "DESCRITPION" (also INTERFACE DESCRIPTION: ....) zurück.
Ich möchte aber, dass zumindest das ERSTE Vorkommen einer Zeile mit "DESCRITPION" zurück.
Gibt es da eine Möglichkeit bei FOR oder FIND ?
(Habe mich auch ein wenig mit dem FOR Attribut "skip" beschäftigt, mache da aber wohl was falsch.)
Oder was kann ich probieren ?
Vielen Dank im Voraus für eine Info
souley
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 92314
Url: https://administrator.de/forum/batch-bestimmte-zeilen-aus-textdatei-auch-bei-mehrfachvorkommen-in-variable-uebertragen-92314.html
Ausgedruckt am: 22.04.2025 um 02:04 Uhr
12 Kommentare
Neuester Kommentar

Servus und willkommen im Club,
Gruß
rem alle Interface Description raus und rest ab in .tmp
findstr /v "INTERFACE DESCRIPTION" >C:\NNM_TEMP\MAIL\NODEINFO.TXT > C:\NNM_TEMP\MAIL\NODEINFO.TMP
rem wenn jetzt noch Description gefunden wird - ausgeben in .ini
findstr "DESCRIPTION" C:\NNM_TEMP\Mail\nodeinfo.tmp > C:\NNM_TEMP\Mail\nodeinfo.ini
Gruß

Servus Miniversum,
was ich nicht verstehe und daher den Teil mit Set weggelassen habe - damit setzt du doch die Variable immer neu - ergo - bleibt nur die Letzte "Änderung" gespeichert. (Die wird ja "zwischendurch" nicht verarbietet - geht also verloren)
Gruß
Edit:
(Vermerk an den Blindfuchs höchstselbst) - Deine Brille taugt auch nichts mehr
was ich nicht verstehe und daher den Teil mit Set weggelassen habe - damit setzt du doch die Variable immer neu - ergo - bleibt nur die Letzte "Änderung" gespeichert. (Die wird ja "zwischendurch" nicht verarbietet - geht also verloren)
Gruß
Edit:
(Vermerk an den Blindfuchs höchstselbst) - Deine Brille taugt auch nichts mehr
Das stimmt wenn der hintere teil der For so lauten würde:
ich habe es aber so geschrieben:
Durch das "if not defined" wird die Variable nur gesetzt wenn sie noch nciht definiert ist. Definiert wird sie bei jeder gefundenen Stelle. Daher geschieht dies nur beim ersten Mal und daher steht nach der For-Schleife auch das erste Ergebnis in der Variabeln.
Um sicherzustellen das sie nicht, aus welchen gründen auch imemr, ncith schon vorher gesetzt ist, steht davor die zeile:
... do SET VAR_Description=%%B
... do if not defined VAR_Description SET VAR_Description=%%B
Um sicherzustellen das sie nicht, aus welchen gründen auch imemr, ncith schon vorher gesetzt ist, steht davor die zeile:
SET "VAR_Description="

Servus
Bzw.
Gruß
Habe im Batch versucht errorlevel abzufragen:
FOR /F "delims=xxx" %%F IN ('FIND "NODE VENDOR:" %mail_temp_file%') DO if %errorlevel%=0 SET VAR_Node_Vendor=%%F
Änder das mal um in:FOR /F "delims=xxx" %%F IN ('FIND "NODE VENDOR:" %mail_temp_file%') DO if %errorlevel%=0 SET VAR_Node_Vendor=%%F
FOR /F "delims=xxx" %%F IN ('FIND "NODE VENDOR:" %mail_temp_file%') DO if %errorlevel%==0 SET VAR_Node_Vendor=%%F
Bzw.
Also den Namen des files wo nichts mit einer bestimmten Bezeichnung gefunden wurde.
if %mail_temp_file%==%VAR_Node_Vendor% set VAR_Node_Vendor=irgendwas
if %mail_temp_file%==%VAR_Node_Vendor% set VAR_Node_Vendor=irgendwas
Gruß

Servus,
DANN SCHREIBE in die VAR_Node_Vendor=irgendwas (oder halt Leerzeichen)
Kannst du mal dein ganzes Script reinstellen, irgendwo ist ein Echo (siehe "echo off" in deiner Datei) ich versteh tatsächlich nicht, was und wie..
Ps: bitte diese benutzen.
Errorlevel abzufragen war unötig von mir.
Ich dachte wenn FIND nichts findet würde das den errorlevel auf 1 setzen.
Das macht er eigentlich auchIch dachte wenn FIND nichts findet würde das den errorlevel auf 1 setzen.
Kann man ein File (enhält Viele Zeilen) mit einem Parameter vergleichen ?
Nein, das wollte ich ja auch nicht bezwecken, wenn Wert der Variablen (die den Filenamen als Inhalt hat - identisch mit der anderen Variable)DANN SCHREIBE in die VAR_Node_Vendor=irgendwas (oder halt Leerzeichen)
Kannst du mal dein ganzes Script reinstellen, irgendwo ist ein Echo (siehe "echo off" in deiner Datei) ich versteh tatsächlich nicht, was und wie..
Ps: bitte diese benutzen.
Hallo souley!
Allerdings müsstest Du (ich hab mir den Rest des Batches nicht angesehen) dann ev eine schon bestehende "C:\NNM_TEMP\Mail\checktext.txt" vorweg löschen (was jetzt implizit durch die Verwendung des einzelnen ">" für die Umleitung erledigt wird).
Noch eine andere Möglichkeit (damit wird allerdings im Fall des Falles eine Leerzeile erzeugt): Wiederum "findstr" verwenden und dann:
Grüße
bastla
Irgend eine Idee wie man es anstellt wenn bei "find" oder "findstr" wenn nichts gefunden wird, dass dann auch NICHTS übergeben wird ?
Versuch es mit "findstr" und:if defined VAR_Node_Vendor echo %VAR_Node_Vendor% > C:\NNM_TEMP\Mail\checktext.txt
Noch eine andere Möglichkeit (damit wird allerdings im Fall des Falles eine Leerzeile erzeugt): Wiederum "findstr" verwenden und dann:
echo\%VAR_Node_Vendor% > C:\NNM_TEMP\Mail\checktext.txt
Grüße
bastla