tollerroller
Goto Top

Mit Findstr bestimmte Werte einer Datei auslesen (Batch)

Hallo zusammen,
ich habe folgendes Problem:
Ich habe eine Textdatei die wie folgt aussieht:

Storage Group Name: XXXXXXX
Storage Group UID: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
HBA/SP Pairs:

HBA UID SP Name SPPort
------- ------- ------
00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 SP B 2
00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 SP A 2
00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 SP A 0
00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 SP B 0

HLU/ALU Pairs:

HLU Number ALU Number
---------- ----------
18 134
17 133
16 132
15 131

Aus dieser Datei interessieren mich eigentlich nur die Zahlenpaare die jeweils unter HLU Number und ALU Number stehen. Beide müssen jeweils in eine Variable eingelesen werden um sie dann in einem weiteren Befehl zu verwenden. Und das für jedes Paar in der Liste. Leider stehen die Zahlen nicht immer in der gleichen Zeile. Daher dachte ich mir per "findstr /N /C:"HLU Number" dateiname.txt" zunächst die Zeile zu ermitteln. Den ermittelten Wert +2 und man wüßte ab welcher Zeile der interessante Teil beginnt. Soweit so gut. Dann dachte ich mir per findstr /r "[0-9]" die Zahlen zu ermitteln. Das war mein Plan.
Leider ist Batchprogrammierung keine Stärke von mir und so hoffe ich auf eure hilfe. Bisher hab ich alles was ich so brauchte durch lesen hier rausgefunden (Danke dafür!!). Aber hier komme ich nicht weiter.

Content-Key: 78717

Url: https://administrator.de/contentid/78717

Printed on: April 19, 2024 at 02:04 o'clock

Member: bastla
bastla Jan 21, 2008 at 19:09:03 (UTC)
Goto Top
Hallo TollerRoller und willkommen im Forum!

Deine Strategie ist gut, und daher sollte es etwa so gehen:
@echo off & setlocal
set "Quelle=D:\dateiname.txt"  
for /f "delims=:" %%i in ('findstr /n /c:"HLU Number" "%Quelle%"') do set Zeile=%%i  
if not defined Zeile echo Nicht gefunden! & goto :eof
set /a Zeile+=1
for /f "tokens=1,2" %%i in ('more +%Zeile% "%Quelle%"') do call :ProcessLine %%i %%j  
goto :eof

:ProcessLine
echo HLU:%1 ALU:%2
goto :eof

Grüße
bastla
Member: Biber
Biber Jan 21, 2008 at 19:30:10 (UTC)
Goto Top
Moin TollerRoller,

tja, jetzt war bastla schneller, aber da ich meine Variante auch fertig habe..

:: ----- snipp  HLUALU.cmd
@echo off & Setlocal
Set "SGDatei=%temp%\StoGroups.txt"  

for /f "delims=:" %%i in ('findstr /n /C:"HLU Number" %sgdatei%') do set /a "notNeeded=1+%%i"  

For /f "tokens=1,2 skip=%notNeeded%" %%i in (%SGDatei%) Do call :setSGPair %%i %%j  
::Demobefehl folgt
Set SG_
goto :eof

:SetSgPair
Set /a "#+=1"  
Set SG_HLU_%#%=%1
Set SG_ALU_%#%=%2
Output:
>e:\work\HLUAlu
SG_ALU_1=134
SG_ALU_2=133
SG_ALU_3=132
SG_ALU_4=131
SG_HLU_1=18
SG_HLU_2=17
SG_HLU_3=16
SG_HLU_4=15

Grüße
Biber
Member: TollerRoller
TollerRoller Jan 22, 2008 at 09:31:27 (UTC)
Goto Top
Hallo,
vielen Dank für eure Antworten. Es funktioniert!!! Genau so habe ich mir das vorgestellt. Ihr glaubt gar nicht wieviel Arbeit mir das spart.
Eine schöne Arbeitswoche euch allen face-smile

Grüße
TollerRoller