dannei
Goto Top

Werte aus Textdatei in Batchdatei laden und als Variable verarbeiten

Hallo zusammen,

ich möchte gerne eine Batch-Datei erstellen, die aus einer externen Textdatei Werte ausliest, und diese Werte als Variable weiter verarbeitet. Ich habe jede Menge Hinweise gefunden, bin aber leider irgendwie nicht daraus Schlau geworden (Newbee-Problem). Hintergrund ist der, das Daten wie IP-Adresse, Gateway, DNS, etc via Batchdatei geschrieben werden sollen. In dem Script funktioniert das auch soweit ganz gut. Nun möchte ich jedoch, das Werte wie IP-Adresse, etc in einer Externen Datei gespeichert werden, die den jeweiligen Umständen entsprechend hin angepasst werden können.

Meine Batch-Datei sieht so aus:

echo off
:start
:: Netzwerkkonfigurationsdaten
SET PC=MASTER
SET DESC=LAN-Verbindung
SET IP=192.168.0.9
SET NM=255.255.255.0
SET GW=192.168.0.210
SET DNS0=192.168.0.210
SET DNS1=
:: Änderung Computername
REG add "HKLMSYSTEMControlSet001ControlComputerNameComputerName" /v ComputerName /t REG_SZ /d %pc% /f
REG add "HKLMSYSTEMControlSet001ServicesTcpipParameters" /v "NV Hostname" /t REG_SZ /d %pc% /f
REG add "HKLMSYSTEMCurrentControlSetControlComputerNameComputerName" /v ComputerName /t REG_SZ /d %pc% /f
REG add "HKLMSYSTEMCurrentControlSetServicesTcpipParameters" /v "NV Hostname" /t REG_SZ /d %pc% /f
:: Anderung der Netzwerkkonfiguration
echo setze statische IP %IP% ...
netsh interface ip set address name=%DESC% source=static addr=%IP% mask=%NM%
echo setze Gateway %GW% ...
netsh interface ip set address name=%DESC% gateway=%GW% gwmetric=0
echo setze primaeren DNS-Server %DNS0% ...
netsh interface ip set dns name=%DESC% source=static addr=%DNS0% register=PRIMARY
echo setze sekundaeren DNS-Server %DNS1% ...
netsh interface ip add dns name=%DESC% addr=%DNS1% index=2
echo setze Computername auf %PC%
:end

Wie schon beschrieben, möchte ich gerne, das die Werte SET PC=..., etc ausgelagert werden.
Mit FOR... komme ich irgendwie noch nicht zurecht, da ich den Syntax noch nicht richtig verstehe.
Ist dies überhaupt so "einfach" möglich?

Freue mich über eine Antwort von Profis und bedanke mich schon einmal herzlich

Content-ID: 63995

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

Ausgedruckt am: 26.11.2024 um 09:11 Uhr

bastla
bastla 17.07.2007 um 13:33:45 Uhr
Goto Top
Hallo dannei und willkommen im Forum!

Wenn Du in der Textdatei eine Zeile mit den entsprechenden Daten in der angegebenen Reihenfolge erstellst und als Trennzeichen ("Delilmiter") dazwischen zB ";" (oder ein anderes, in den Daten sicher nicht vorkommendes Zeichen) verwendest, kannst Du sogar ohne explizit benannte Variable auskommen. Beispiel:
for /f "tokens=1-7 delims=;" %%a in (D:\Daten.txt) do (  
	:: Änderung Computername
	REG add "HKLMSYSTEMControlSet001ControlComputerNameComputerName" /v ComputerName /t REG_SZ /d %%a /f  
	REG add "HKLMSYSTEMControlSet001ServicesTcpipParameters" /v "NV Hostname" /t REG_SZ /d %%a /f  
	REG add "HKLMSYSTEMCurrentControlSetControlComputerNameComputerName" /v ComputerName /t REG_SZ /d %%a /f  
	REG add "HKLMSYSTEMCurrentControlSetServicesTcpipParameters" /v "NV Hostname" /t REG_SZ /d %%a /f  
	:: Anderung der Netzwerkkonfiguration
	echo setze statische IP %%c ...
	netsh interface ip set address name=%%b source=static addr=%%c mask=%%d
	echo setze Gateway %%e ...
	netsh interface ip set address name=%%b gateway=%%e gwmetric=0
	echo setze primaeren DNS-Server %%f ...
	netsh interface ip set dns name=%%b source=static addr=%%f register=PRIMARY
	echo setze sekundaeren DNS-Server %%g ...
	netsh interface ip add dns name=%%b addr=%%g index=2
	echo setze Computername auf %%a
)
Zur verwendeten "for"-Zeile: Durch die Angabe des Delimiters ";" wird die Zeile in einzelne "Tokens" (Bestandteile) zerlegt. Den Variablennamen des erste Tokens kannst Du selbst festlegen (im Beispiel %%a), alle weiteren werden dann einfach alphabetisch aufsteigend benannt.

Alternativ kannst Du natürlich bei den bisherigen Variablennamen bleiben (ist auch etwas übersichtlicher) - dann müsste der Code etwa so aussehen:
@echo off & setlocal
for /f "tokens=1-7 delims=;" %%a in (D:\Daten.txt) do (  
	set "PC=%%a"  
	set "DESC=%%b"  
	set ...
)
:: Änderung Computername
... weiter wie bisher ...
Die Datenzeile wäre in beiden Fällen
MASTER;LAN-Verbindung;192.168.0.9;255.255.255.0;192.168.0.210;192.168.0.210;
ohne eine zusätzliche Leerzeile (aber mit genau 6 Trennzeichen für 7 Datenfelder).

Grüße
bastla
dannei
dannei 17.07.2007 um 13:49:57 Uhr
Goto Top
Hallo Bastla,

vielen Dank. Das waren genau die Hinweise, die ich benötigt habe. Auch die Erklärung war supergut. Nun komme ich bestens zurecht.

Dankeschön face-smile