Batch ip Adresse aus ini / txt Datei auslesen und in einer Variable speichern

Kingfisher OK

Rear Admiral
Registriert
Dez. 2007
Beiträge
5.164
Hallo zusammen,

ich suche derzeit eine Möglichkeit innerhalb einer Batch Datei eine Datei einzulesen, nach einem String zu suchen und die ip Adresse die in der nächsten Zeile steht auszulesen. Ich bin absoluter BATCH Anfänger und würde mich auch über nützliche Links freuen.

Die Datei ist ungefähr so aufgebaut:

Code:
Clientname1
IPADRESS=192.168.0.1
Clientname2
IPADRESS=192.168.0.2
.
.
.

der code sollte folgendes erledigen:

Code:
Lade "C:\bla\bla\bla\config.txt
suche %VARIABLE1 in Datei
speichere IP=nächste Zeile ab 9. Buchstabe

viele Grüße
 
Starte mal hiermit:

Code:
@ECHO OFF
for /f "tokens=2 delims==" %%i in (input.txt) do (
			echo %%i
	)

Das gibt (ohne Validierung) nur die IP Adressen aus, sofern Du wirklich keinen anderen Aufbau in Deiner input.txt hast. Weitere Verarbeitung natürlich möglich.
 
So sollte es funktionieren:
Code:
@ECHO OFF
for /f "usebackq tokens=2 delims==" %%i in ("C:\Program Files (x86)\xxx\config\input.txt") do (
    echo %%i
)
usebackq: http://ss64.com/nt/for_f.html
 
Hallo Kingfisher,

das ist relativ klar, da Du Klammern in Deinem Pfad hast:

Probiere es mal mit:

Code:
@ECHO OFF
for /f "tokens=2 delims==" %%i in (C:\%Program Files (x86)%\xxx\input.txt) do (
			echo %%i
	)

Wie Du die Ausgabe in eine Datei laufen lässt, weißt Du?

MfG

Edit sagt: Das passiert, wenn man im Editor bleibt und erst später auf "Antworten" klickt. :) Es per Option (r15ch13) zu lösen ist m.E. besser.
 
Zuletzt bearbeitet:
Ich bin der Lösung meines Problems ein ganz schönes Stück näher aber noch nicht nah genug.

die "input.txt" ist wie folgt aufgebaut:

Code:
[CLIENT1]
Addresses=192.168.0.1
Port=10000
[CLIENT2]
Addresses=192.168.0.2
Port=10000
[CLIENT3]
Addresses=192.168.0.3
Port=10000

Ich möchte nun zu einem Client die entsprechende IP-Adresse herausfinden indem ich der Batch Datei zum beispiel mittels Startparameter "CLIENT1" übergebe.

Idee dabei ist die folgende:

Code:
@ECHO OFF
set Bool=FALSE

for /F "usebackq tokens=2 delims==" %%i IN ("%ProgramFiles(x86)%\xxx\config\input.txt") DO (		
			IF %%i == [CLIENT1] set Bool=TRUE
			IF %Bool% == TRUE (echo %%i goto :Weiter)
	)
:Weiter
pause

Das geht nur eben nicht, da ich zwar [CLIENT1] als Bedingung nehme, %%i allerdings niemals [Client1] als wert haben wird, da das Trennzeichen ein "=" ist...
 
Zuletzt bearbeitet:
Hui Batch ist ja gruselig :D

Wenn man tokens=1,2 verwendet, dann werden die Variablen %%g und %%h angelegt (bei 1,2,3 wuerde z.B. noch %%i angelegt. Siehe ganz unten: http://ss64.com/nt/for_f.html).

Der Teil zwischen den Klammer der For-Schleife wird nur einmal ausgewertet. D.h. die %bool% variable bleibt immer false.
Dazu muss man setlocal enableextensions enabledelayedexpansion verwenden. Siehe http://stackoverflow.com/questions/691047/batch-file-variables-initialized-in-a-for-loop

Ausserdem muss bool wieder auf false gesetzt werden und man muss nach dem Adressfeld abfragen. :)

Code:
@echo off
setlocal enableextensions enabledelayedexpansion
set bool=false

for /F "usebackq tokens=1,2 delims==" %%g IN ("C:\Program Files (x86)\xxx\config\input.txt") DO (

    if %%g == [%1] (
        set bool=true
    )

    if !bool! == true (
        if %%g == Addresses (
            echo %%h
            set bool=false
        )
    )
)

pause
 
Zurück
Oben