In mehrzeiliger Textdatei verschiedene Zeilen auslesen und in Variablen aufsplitten
Hallo Forum,
ich möchte per Batch Datenreihen aus einer Textdatei verwerten.
Hintergrund:
Es sollen IP-Einträge gesetzt werden, die für verschiedene Rechner in einer textdatei vordefiniert werden.
Beispiel:
Settings.txt
PC1 | 192.168.10.10 | 192.168.10.1 | 255.255.255.192 | etc....
PC2 | 192.168.10.11 | 192.168.10.1 | 255.255.255.192 | etc....
PC3 | 192.168.10.12 | 192.168.10.1 | 255.255.255.192 | etc....
PC4 | 192.168.10.13 | 192.168.10.1 | 255.255.255.192 | etc....
Ich will nun den Benutzer der Datei (Administratorrechte vorhanden) auffordern, die Kennung des PCs einzugeben.
Die Batch soll nun in der Settings.txt zu der Zeile springen, in der beispielsweise "PC2" steht. Nun sollen die
einzelnen Columns als Variablen in die entsprechend definierten Stellen in der Batch eingefügt werden. Also so:
IP-Adresse soll sein IP
Subnetzadresse soll sein SN
Gateway soll sein GW
etc...
netsh interface ipv4 set address "LAN-Verbindung" static %IP% %SN% %GW% 1
Mein Problem ist nun, wie kann ich erreichen, dass die einzelnen Columns so definiert werden, wie ich sie brauche?
Mir fehlt da komplett der Ansatz...
Also
1. Wie springe ich in die entsprechende Zeile der Datei "Settings.txt", die der User vorgibt und
2. wie definiere ich die Columns so, dass eben bei IP die IP-Adresse, bei SN die Subnetz-Adresse etc. übergeben wird?
Schon mal vielen Dank für Eure Hilfe!
ich möchte per Batch Datenreihen aus einer Textdatei verwerten.
Hintergrund:
Es sollen IP-Einträge gesetzt werden, die für verschiedene Rechner in einer textdatei vordefiniert werden.
Beispiel:
Settings.txt
PC1 | 192.168.10.10 | 192.168.10.1 | 255.255.255.192 | etc....
PC2 | 192.168.10.11 | 192.168.10.1 | 255.255.255.192 | etc....
PC3 | 192.168.10.12 | 192.168.10.1 | 255.255.255.192 | etc....
PC4 | 192.168.10.13 | 192.168.10.1 | 255.255.255.192 | etc....
Ich will nun den Benutzer der Datei (Administratorrechte vorhanden) auffordern, die Kennung des PCs einzugeben.
Die Batch soll nun in der Settings.txt zu der Zeile springen, in der beispielsweise "PC2" steht. Nun sollen die
einzelnen Columns als Variablen in die entsprechend definierten Stellen in der Batch eingefügt werden. Also so:
IP-Adresse soll sein IP
Subnetzadresse soll sein SN
Gateway soll sein GW
etc...
netsh interface ipv4 set address "LAN-Verbindung" static %IP% %SN% %GW% 1
Mein Problem ist nun, wie kann ich erreichen, dass die einzelnen Columns so definiert werden, wie ich sie brauche?
Mir fehlt da komplett der Ansatz...
Also
1. Wie springe ich in die entsprechende Zeile der Datei "Settings.txt", die der User vorgibt und
2. wie definiere ich die Columns so, dass eben bei IP die IP-Adresse, bei SN die Subnetz-Adresse etc. übergeben wird?
Schon mal vielen Dank für Eure Hilfe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 274617
Url: https://administrator.de/contentid/274617
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo Boory01,
hier ein Schnipsel, den Du an Deine Bedürfnisse anpassen kannst:
Siehe auch mein Tutorial zur FOR-Schleife.
In Zeile 6 musst Du den Pfad zur Settings-Datei eintragen. Die
Gruß
Friemler
hier ein Schnipsel, den Du an Deine Bedürfnisse anpassen kannst:
@echo off & setlocal
set /p "CompName="
echo.
set "SettingsFile=.\settings.txt"
set "Found="
set "IP="
set "SN="
set "GW="
for /f "tokens=2-4 delims=|" %%a in ('findstr /i /b /c:"%CompName%" "%SettingsFile%"') do (
set "Found=1"
for /f %%A in ("%%a") do set "IP=%%A"
for /f %%A in ("%%c") do set "SN=%%A"
for /f %%A in ("%%b") do set "GW=%%A"
)
if defined Found (
echo IP: %IP%
echo Subnet: %SN%
echo Gateway: %GW%
echo.
) else (
echo PC-Name ist unbekannt.
echo.
)
Siehe auch mein Tutorial zur FOR-Schleife.
In Zeile 6 musst Du den Pfad zur Settings-Datei eintragen. Die
FOR
-Schleifen in den Zeilen 14-16 entfernen führende und angehängte Leerzeichen.Gruß
Friemler
Hallo Boory01,
Gruß
Friemler
Mit dem Eintrag bei "tokens" werden in Deinem Schnipsel durch 2-4 die Columns definiert, auf die zugegriffen wird, richtig?
Ja, richtig.Das würde heißen, wenn ich mehr Variablen haben sollte, würden sich diese Einträge auf z.B. 2-7 erweitern,
Ja, richtig. Allerdings kann die FOR
-Schleife maximal 31 Tokens verarbeiten, d.h. Du kannst maximal die ersten 31 Spalten Deiner Eingabedatei verarbeiten.wobei Column Nummer 1 ja der führende Eintrag ist, nachdem die ganze Zeile angewählt wird.
Ja, richtig. Deswegen hat der FINDSTR
-Befehl in der Klammer des FOR
-Befehls in Zeile 12 den Parameter /b
, die Suche nach dem Rechnernamen wird dadurch auf den Zeilenanfang "festgenagelt".Wenn ich dann die Einträge für "if defined Found" erweitern will, müsste ich dann auch die oberen "for /f %%A"-Einträge anpassen.
Ja, wenn die Spalten der Eingabedatei, so wie in Deinem Beispiel, mit einem Leerzeichen beginnen und enden.Nun hast Du von oben nach unten ja %%a, %%c und %%b gesetzt. Hat diese Reihenfolge einen Hintergrund oder ist das egal und ich könnte dann in folgenden "For"-Schleifen mit %%d, %%e, %%f... weitermachen?
Die Reihenfolge ist egal. %%a
entspricht der 2. Spalte der Eingabedatei, %%b
der 3. Spalte, %%c
der 4. Spalte. Die Subnetzmaske steht in Deinem Beispiel in Spalte 4, deshalb muss die Variable %SN%
mit dem Inhalt der FOR
-Laufvariablen %%c
gefüllt werden. Deren Wert steht in der FOR
-Laufvariablen %%A
, allerdings um evtl. vorhandene Leerzeichen gekürzt. Wenn der Inhalt einer Spalte Deiner Eingabedatei Leerzeichen enthalten kann, wäre es am besten, beim Schreiben der Eingabedatei den Spalteninhalt nicht in Leerzeichen einzuschließen. Dann können die FOR
-Schleifen in den Zeilen 14-16 entfallen und die Laufvariablen der äußeren FOR
-Schleife direkt verarbeitet werden.Gruß
Friemler
Hallo Boory01,
Gruß
Friemler
... es widerstrebt mir, einfach "irgendwas" von anderen herzunehmen, zu verbiegen und gut ist - ich verstehe auch gerne, WAS ich hier eigentlich tue und wie die Zusammenhänge sind.
Das ist die richtige Einstellung, denn selbst denken macht schlau. ... ich würde mich gerne melden, wenn ich alles nach meinen Bedürfnissen zusammengebaut habe und es (hoffentlich) so funktioniert, wie es geplant ist.
Kein Problem, kannst Du gerne tun.Gruß
Friemler