dbernsee
Goto Top

komma separierte textdatei per for-next schleife auslesen

Hallo!

Ich habe eine server.txt datei mit folgendem Inhalt: server1,server2,server3...usw diese würde ich gern auslesen ! (...um der frage vorwegzu greifen JA die datei muss genauso aufgebaut sein!)

mir ist klar das wenn die Datei wie folgt aussehen würde alles palletti wäre:

server1<-CRLF
server2
server3
usw.

zum testen habe ich folgendes probiert...was natürlich auch wunderbar funktioniert...

FOR /F "tokens=1-3 delims=," %a IN (c:\batch\server.txt) DO echo %a %b %c

...das ist aber nicht das was ich möchte...die for schleife sollte meine text datei so auslesen das ich als wert %%a jeden server nacheinander ansprechen kann !

mein nächster gedanke war ..evtl. kann ich mit einem tool (zb. sed oder gsar) die kommas durch zeilenumbrüche erstzen lassen !?

...aber mit den zeilenumbrüchen in einer batch ist das ja soone sache !!! habe im intenet nichts gefunden was da wirklich funzt!!!

zb. so :

FOR /F "tokens=1" %a IN ('gsar -f, -r?? server.txt') DO echo %a

aber evtl. hat ja jemand von euch noch eine ganz andere idee !?

mfg
D.Bernsee

Content-Key: 91642

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

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

Member: Biber
Biber Jul 09, 2008 at 18:50:05 (UTC)
Goto Top
Moin dbernsee,

willkommen im Forum.

Wenn Du die Werte partout in eine Ein-Server-pro-Zeile-Liste schreiben möchtest, dann kannst Du es so machen:
for /f "delims=, tokens=1-3" %a in (server.txt) do @((echo %a) &(echo %b) &@(echo %c))  
...vom CMD-Prompt aus. Und das Ganze ggf. in eine neue Datei (mit ">"9 oder eine vorhandene (mit ">>") umleiten.

Andererseits: Mach es doch einfach mit einer zeilenweisen Abarbeitung je 3 Server nacheinander (wenn die halt so in der Datei stehen),

Batch:
@echo off & setlocal
for /f "delims=, tokens=1-3" %%a in (server.txt) do (  
     call :machwatmit %%a
     call :machwatmit %%b
     call :machwatmit %%c
)
goto :eof

:machwatmit param1 ist der Servername
echo jetzt wird Server %1 bearbeitet...
echo bla...
goto :eof

Grüße
Biber
P.S. Hier im Forum ### es vielleicht nicht, aber es funktioniert.
Member: dbernsee
dbernsee Jul 15, 2008 at 13:17:48 (UTC)
Goto Top
Hallo Biber,

danke für die schnelle Antwort...ich war leider nicht im Lande um sofort zu reagieren! Tja eigentlich hatte ich ja bereits so eine ähnliche Lösung
...denn das hier "FOR /F "tokens=1-3 delims=," %a IN (c:\batch\server.txt) DO echo %a %b %c" funktioniert ja wunderbar !!! Ist aber wie gesagt nicht das was ich möchte ...die server.txt enthält nämlich nicht nur 3 maschinen sondern 30+ und mit der oben genannten Methode habe ich ab 29 bzw. 26 (ohne umlaute) ein Problem! Außerdem wäre die Schleife dann elendslang und unübersichtlich! Ich benutze die Serverliste noch in einer anderen batch bzw. mit einem tool welches leider die bekannte Schreibweise (server1,server2...) voraussetzt...sonst hätte ich die liste schon längst händisch' umformatiert!!! Das Format der Liste ist mir letztendlich wurscht ...den echo in meiner schleife habe ich nur als beispiel eingefügt... im original steht dort ein tool namens uptime (zeigt mir die server uptime an!!!)

meine 1te batch...
IST Stand (f u n z t):
FOR %%A IN (server1,server2,server3,...) DO uptime %%A>>c:\batch\server_uptime.log

SOLL Stand (f u n z t nicht):
FOR /F "tokens=???" %%A IN (server.txt) DO uptime %%A>>c:\batch\server_uptime.log


und meine 2te batch schaut so aus...

for /f "tokens=3 delims=: " %%a in ('fping -H %wdir%\server.txt -n1 -l^|find "Reply"') do (
for /f "tokens=2" %%b in ('fping %%a -a -n1^|find "Pinging"') do (
if not exist \\%%a\admin$ echo Can't access Admin Share on %%b !!!>>%wdir%\admin_share.log
)
)

den 2ten schleifen durchgang benötige ich für die (rück)übersetzung von ip auf hostname !

ich möchte nur noch eine server liste pflegen ...deshalb die umstellung der 1ten batch !!! und am liebsten würde ich die server liste abfragen ohne ein weiteres output file zu erzeugen !!!

mfg
db
Member: bastla
bastla Jul 15, 2008 at 16:11:51 (UTC)
Goto Top
Hallo dbernsee!

Batch 1 sollte eigentlich so gehen:
for /f "delims=" %%i in (server.txt) do for %%A in (%%i) do uptime %%A>>c:\batch\server_uptime.log  
Grüße
bastla
Member: dbernsee
dbernsee Jul 16, 2008 at 06:02:48 (UTC)
Goto Top
Moin Moin!

Krass... immer wenn ich gerade denke ich kenn' mich ganz gut in NT-Batch aus ...kommt sowas !!!

Supi 1000 Dank an Superbrain "bastla" !!!

...wenn Du mir jetzt noch die Schleife erklärst bin ich auch schon zufrieden !

...nein warte ich versuch's selbst mal...
...du gibst ja bei der ersten schleife keinen trenner und nix an ...und wir arbeiten dort mit der variable %%i (d.h. %%i stellt in dem moment den kompletten Inhalt der server.txt dar ...richtig?) ...dann wird eine 2te schleife dran gehängt und....ahh mir dämmerts!!!! Coool ....echt nicht schlecht...!

...also falls ich's noch nicht erwähnt hatte ihr jung's von administrator.de habt's echt drauf !!!

gruß
db

p.s.: wenn die for schleife ohne /f auch befehle ausführen könnte hätte man's ja theoretisch auch über nen type auslesen lassen können !!! so z.b. FOR %A IN ('type server.txt') DO uptime %A ....

geht aber eben nicht weil dafür wie gesagt der parameter /f gesetzt sein muss !!!