Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Werte aus Textdatei in Batchdatei laden und als Variable verarbeiten

Frage Entwicklung Batch & Shell

Mitglied: dannei

dannei (Level 1) - Jetzt verbinden

17.07.2007, aktualisiert 13:49 Uhr, 6868 Aufrufe, 2 Kommentare

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
Mitglied: bastla
17.07.2007 um 13:33 Uhr
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:
01.
for /f "tokens=1-7 delims=;" %%a in (D:\Daten.txt) do ( 
02.
	:: Änderung Computername 
03.
	REG add "HKLMSYSTEMControlSet001ControlComputerNameComputerName" /v ComputerName /t REG_SZ /d %%a /f 
04.
	REG add "HKLMSYSTEMControlSet001ServicesTcpipParameters" /v "NV Hostname" /t REG_SZ /d %%a /f 
05.
	REG add "HKLMSYSTEMCurrentControlSetControlComputerNameComputerName" /v ComputerName /t REG_SZ /d %%a /f 
06.
	REG add "HKLMSYSTEMCurrentControlSetServicesTcpipParameters" /v "NV Hostname" /t REG_SZ /d %%a /f 
07.
	:: Anderung der Netzwerkkonfiguration 
08.
	echo setze statische IP %%c ... 
09.
	netsh interface ip set address name=%%b source=static addr=%%c mask=%%d 
10.
	echo setze Gateway %%e ... 
11.
	netsh interface ip set address name=%%b gateway=%%e gwmetric=0 
12.
	echo setze primaeren DNS-Server %%f ... 
13.
	netsh interface ip set dns name=%%b source=static addr=%%f register=PRIMARY 
14.
	echo setze sekundaeren DNS-Server %%g ... 
15.
	netsh interface ip add dns name=%%b addr=%%g index=2 
16.
	echo setze Computername auf %%a 
17.
)
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:
01.
@echo off & setlocal 
02.
for /f "tokens=1-7 delims=;" %%a in (D:\Daten.txt) do ( 
03.
	set "PC=%%a" 
04.
	set "DESC=%%b" 
05.
	set ... 
06.
07.
:: Änderung Computername 
08.
... weiter wie bisher ...
Die Datenzeile wäre in beiden Fällen
01.
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
Bitte warten ..
Mitglied: dannei
17.07.2007 um 13:49 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Visual Studio
gelöst VBS schreibt bestimmte Variable nicht in Textdatei (11)

Frage von Saschaaaaa zum Thema Visual Studio ...

JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...