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, 6930 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst Powershell - Werte in Variable durch Schleife erweitern bzw. ändern (5)

Frage von ralfkausk zum Thema Batch & Shell ...

Microsoft Office
gelöst Excel-Werte eingeben und in neue Tabelle schreiben (9)

Frage von werner1966 zum Thema Microsoft Office ...

VB for Applications
gelöst Bestimmtes Arrayfeld mit Variable aufrufen? - VBS (10)

Frage von gabrixl zum Thema VB for Applications ...

Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(29)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Windows Server

Exchange 2010 Active Directory und Windows Server 2016

(4)

Erfahrungsbericht von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Internet
gelöst Mitarbeiter surft auf unerwünschter Seite - Wie damit umgehen? (44)

Frage von sabines zum Thema Internet ...

Netzwerke
Wie erstelle ich ein Intranet (19)

Frage von Leonardnet zum Thema Netzwerke ...

Netzwerke
VPN-Server einrichten PPTPD-Einrichtung gescheitert (15)

Frage von MIlexx zum Thema Netzwerke ...

LAN, WAN, Wireless
gelöst Eintägige Netzwerkunterbrechung trotz Backupleitung (15)

Frage von iAmbricksta zum Thema LAN, WAN, Wireless ...