Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

Dateien mit Batch erstellen und Zeilen mit SED ersetzen

Mitglied: swoosh

swoosh (Level 1) - Jetzt verbinden

05.08.2008, aktualisiert 20:53 Uhr, 7031 Aufrufe, 3 Kommentare

Hallo Forum,

mein erster Beitrag, mein erstes Problem, sorry.
Es geht um eine Batchanweisung. Es sollte Batch verwendet werden, weil ich nur eine WIN Maschine zur Verfügung habe und mir hier auch nicht eine große Entwicklungsumgebung installieren möchte.

Vielen Dank für eure Hilfe!

Für ein Telnetprogramm habe ich mir mit BATCH hunderte von *.ini Dateien erstellt. Sie heißen immer nach dem Schema "ipadresse.ini".
Nun möchte ich in diese Dateien an einer Stelle die mit XYXYX makiert ist, jeweils den Hostnamen einfügen. Hierzu habe ich mich nach einigem suchen für SED entschieden.

Ich habe zwei Text Dateien ipaddress.txt und hostname.txt. Beide stehen wie folgt in realation:

ipaddress.txt:
ipaddress1
ipaddress2
ipaddress3
...

hostname.txt:
hostname1
hostname2
hostname3
...

Da ich ja mit Batch beschränkt bin und nur eine Variable in der for Schleife habe, habe ich zwei for Schleifen verschachtelt.

1. Schleife ruft die datei auf
2. Schleife zieht den hostnamen aus hostname.txt

Damit die 2. Schleife nicht alles durchläuft wird getestet, ob die Datei "ipaddress1.ini" existiert.
- Wenn ja, wird der Hostname eingeschrieben
- Der Hostname aus der hostname.txt gelöscht
- Die Datei verschoben

Allerdings klappt es nicht wie ich es mir vorgestellt habe:
- Wird der Hostname nicht reingeschrieben, obwohl der Befehl in der cmd ausgeführt, wunderbar funktioniert
- hostname.txt ist sofort leer, obwohl der Befehl in der cmd ausgeführt, wunderbar funktioniert

Ich habe @echo an, und man kann sehen, dass das Programm theoretisch tut was es soll, praktisch nur leider überhaupt nicht.

DAS PROGRAMM:
@echo off
for /f %%i in (ipaddress.txt) do (
for /f %%j in (hostname.txt) do (
if exist %%i.ini (
sed "s/XYXYX/%%j/" %%i.ini>ablage.txt \\Ersetz XYXYX durch den Hostnamen
ren ablage %%i.ini
sed /"%%j"/d hostname.txt>ablage2.txt \\Löscht den bereits verwendeten Hostnamen aus der hostname.txt
ren ablage2.txt hostname.txt
move %%i.ini .\ini\ \\Verschiebt die bearbeitete Datei
)
)
)
Die "if exist" Anweisung wird teilweise auch durchlaufen, wenn die Datei garnicht da ist!
Wie Ihr seht, habe ich inzwischen mit "Ablagen" gearbeitet, was dazu führt, das die hostname.txt nicht sofort leer ist...

Ich habe es schon des öffteren umgeschrieben und getestet und gemacht. Die FOR schleifen, die IF, die SED befehle ... Ich finde einfach nicht den Fehler.

Ist mein Fehler das ich Batch verwende?
Mitglied: bastla
05.08.2008 um 19:16 Uhr
Hallo swoosh und willkommen im Forum!

Wie ich Deine Zielsetzung verstehe, geht es darum, in allen bereits existierenden Dateien der Art "172.30.20.10.ini" den darin enthaltenen Text "XYXYX" durch den dieser Adresse entsprechenden Hostnamen zu ersetzen.

Damit stellt sich die Frage nach der Zuordnung zwischen IP-Adresse und Hostnamen, bzw nach dem Zusammenhang der beiden Dateien "ipaddress.txt" und "hostname.txt" - ist das Kriterium die Position innerhalb der jeweiligen Datei (= Zeilennummer), sodass also der Hostname zur IP-Adresse aus Zeile 5 der "ipaddress.txt" in Zeile 5 der "hostname.txt" zu finden ist?

Grüße
bastla
Bitte warten ..
Mitglied: swoosh
05.08.2008 um 20:40 Uhr
Hallo basta,

vielen Dank für die schnelle Reaktion.

Korrekt. In Zeile 5 der hostname.txt steht der Hostname der IP Adresse aus Zeile 5 der ipaddress.txt.
Bitte warten ..
Mitglied: bastla
05.08.2008 um 20:52 Uhr
Hallo swoosh!

Dann wäre mein erster Schritt, die beiden Dateien / Tabellen zusammenzuführen, etwa mit folgendem VBScript (Batch wäre auch möglich, aber etwas langsam):
01.
Const FileIP = "D:\Ipaddress.txt" 
02.
Const FileHost = "D:\hostname.txt" 
03.
Const FileIP2H = "D:\IP2Hosts.txt" 
04.
 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
IP = Split(fso.OpenTextFile(FileIP).ReadAll, vbCrLF) 
07.
Host = Split(fso.OpenTextFile(FileHost).ReadAll, vbCrLF) 
08.
UIP = UBound(IP) 
09.
If UIP = UBound(Host) Then 
10.
	Set IP2H = fso.CreateTextFile(FileIP2H) 
11.
	For i = 0 To UIP 
12.
		If Trim(IP(i))<>"" Then IP2H.WriteLine IP(i) & "=" & Host(i) 
13.
	Next 
14.
	IP2H.Close 
15.
	WScript.Echo "Datei """ & FileIP2H & """ erstellt." 
16.
Else 
17.
	WScript.Echo FileIP & " und " & FileHost & " haben unterschiedliche Zeilenanzahl!" 
18.
End If
Dieses VBScript ist (mit angepassten Pfaden in den ersten 3 Zeilen - der Pfad aus Zeile 3 wird auch im folgenden Batch benötigt) mit dem Dateityp ".vbs" zu speichern und kann per Doppelklick ausgeführt werden.

Für den Rest dann wieder Batch:
01.
@echo off & setlocal 
02.
set "Ziel=.\ini" 
03.
for %%i in ("D:\Dein Ordner\*.ini") do ( 
04.
	for /f "tokens=2 delims==" %%j in ('findstr /b /c:"%%~ni=" "D:\IP2Hosts.txt"') do ( 
05.
		if "%%j" neq "" sed "s/XYXYX/%%j/" %%i>"%Ziel%\%%i" 
06.
		findstr "%%j" "%Ziel%\%%i">nul 
07.
		if errorlevel 1 ( 
08.
			del "%Ziel%\%%i" 
09.
		) else ( 
10.
			del %%i 
11.
12.
13.
)
Hier wird versucht, für alle .ini-Dateien des angegebenen Ordners (Zeile 3) aufgrund des Dateinamens (%%~ni) in der vorher erstellten "D:\IP2Hosts.txt" den Hostnamen zu finden. Gelingt dies, wird mit "sed" eine neue .ini (im angegebenen Zielordner) erzeugt, danach zur Sicherheit in dieser .ini nach dem Vorhandensein des Hostnamens gesucht und entweder die neue Datei (falls die Ersetzung nicht erfolgreich war und daher der Hostname nicht gefunden wird) oder die Originaldatei gelöscht.

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Zeile eine Datei per batch ersetzen
Frage von duckknightBatch & Shell2 Kommentare

Hallo die Damen und Herren, ich bin nun bei allen Suchanfragen immer wieder hier gelandet, habe aber das was ...

Batch & Shell
Sed - Zeile mit bestimmten Anfang löschen
gelöst Frage von PanubuBatch & Shell2 Kommentare

Hallo zusammen, ich habe schon mal ein wenig mit sed "herumgespielt" aber noch nicht wirklich zu dem Ergebnis gekommen, ...

Ubuntu
Sed, 4. zeile nach regexp ausgeben
Frage von rsadmchefUbuntu1 Kommentar

Hallo Team, Mein System ist Lubuntu 14.04 LTS Ich benötige ein wenig sed - Hilfe. Meine zu bearbeitende Datei ...

Batch & Shell
Batch Zeile suchen und ersetzen Variabler Pfad
Frage von pi0h.kkBatch & Shell6 Kommentare

Hallo, ich stehe leider vor einem kleinen Problem was ich nicht in den Griff bekommen. Ich möchte in mehreren ...

Neue Wissensbeiträge
Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 3 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 8 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 3 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement21 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS10 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...