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

Batch - IP-Adressen in txt ersetzen

Frage Entwicklung Batch & Shell

Mitglied: mafiosi

mafiosi (Level 1) - Jetzt verbinden

08.12.2010 um 15:47 Uhr, 2739 Aufrufe, 2 Kommentare

Hallo,

ich möchte eine Batch schreiben, mit der ich in einer txt-Datei IP-Adressen (an beliebigen Stellen in der txt-Datei), durch die IP-Adresse "0.0.0.0" ersetzen kann.
Ich konnte das ganze leider nicht ohne die Tokenfunktion lösen, was mich in der Hinsicht einschränkt, dass ich mich auf bestimmte Token festlegen muss.
Die IP-Adressen befinden meistens im Token 5 oder 6 der unterschiedlichen Zeilen.

Ein Teil des Problem konnte ich durch den unten stehenden Quellcode schon lösen, jedoch ergeben sich folgende Probleme:
- Die IP-Adressen befinden sich zwar meistens an token5 oder token6, aber nicht immer
- Leerzeilen werden gelöscht
- Zeilen in denen es nur ein Wort gibt, werden durch "zeile:=0.0.0.0" ersetzt - der alte Inhalt wird also überschrieben
- die Ausführungsgeschwindigkeit ist relativ langsam

Wie kann ich diese 4 Probleme lösen?
Viele Dank für eure Mühen!


Hier ein kleines Beispiel einer möglichen txt-Datei:
01.
 
02.
TEST 
03.
teil1 teil2 teil3 teil4 10.4.111.1 test6 test7 
04.
teil1 teil2 teil3 teil4 teil5 test6 test7 
05.
teil1 teil2 teil3 teil4 teil5 0.168.2.223 test7 
06.
die zeile bleibt gleich test test test test 
07.
 
08.
teil1 teil2 teil3 teil4 142.0.0.225 test6 test7 
09.
teil1 teil2 teil3 teil4 teil5 122.55.0.226 test7 
10.
die zeile bleibt gleich test test test test 
11.
teil1 teil2 teil3 teil4 4.168.0.228 test6 test7 
12.
die zeile bleibt gleich test test test test 
13.
teil1 teil2 teil3 teil4 test5 test6 94.23.111.254 
14.
teil1 teil2 teil3 teil4 102.168.122.211 test6 test7 
15.
 

Mein bisheriger Code ist:

01.
SETLOCAL enabledelayedexpansion 
02.
echo on 
03.
SET "quell_datei=C:\temp\test.txt" 
04.
SET "ziel_datei=C:\Temp\neu.txt" 
05.
SET "ersetzen_durch=0.0.0.0" 
06.
echo  
07.
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO (SET zeile=%%i& CALL :ersetzen !zeile!) 
08.
  
09.
GOTO :weiter 
10.
:ersetzen 
11.
 
12.
 
13.
FOR /F "tokens=5 delims= " %%a IN ("%zeile%") DO (SET token5=%%a) 
14.
echo %token5% 
15.
 
16.
echo %token5%|FINDSTR /R "[0-9].*[0-9].*[0-9].*[0-5]" >NUL &&SET suchen_nach=%token5% 
17.
 
18.
echo %zeile% 
19.
echo . 
20.
echo %a% 
21.
echo."TOKEN5 ist:"%token5% 
22.
echo."SUCHEN_NACH ist:" %suchen_nach% 
23.
 
24.
SET zeile=!zeile:%suchen_nach%=%ersetzen_durch%! 
25.
IF [!zeile!] EQU [] (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%) 
Mitglied: bastla
08.12.2010 um 16:13 Uhr
Hallo mafiosi und willkommen im Forum!

Wenn Du die eigentliche Arbeit einem VBScript überlässt (wird vom Batch selbst erzeugt), sollte das etwas sicherer sein:
01.
echo on & setlocal 
02.
set "quell_datei=C:\temp\test.txt" 
03.
set "ziel_datei=C:\Temp\neu.txt" 
04.
set "ersetzen_durch=0.0.0.0" 
05.
 
06.
set R=%temp%\ReplaceIP.vbs 
07.
> %R% echo Set a=WScript.Arguments:Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(a(0)).ReadAll 
08.
>>%R% echo Set rE=New RegExp:rE.Global=True:rE.Pattern="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" 
09.
>>%R% echo fso.CreateTextFile(a(1)).Write rE.Replace(T,a(2)) 
10.
 
11.
cscript //nologo %R% "%quell_datei%" "%ziel_datei%" "%ersetzen_durch%"
Hinsichtlich der Beibehaltung von Leerzeilen noch ein Tipp: Mit einer Schleife der Art
FOR /f "tokens=1* delims=:" %%i IN ('FINDSTR /n "^" "%quell_datei%"') DO SET zeile=%%j & CALL :ersetzen
kannst Du im Unterprogramm einfach mittels
if not defined zeile echo\ & goto :eof
eine Leerzeile ausgeben und gleich wieder den Rücksprung vornehmen oder die Variable %zeile% (wegen des Unterprogramms ist übrigens keine "delayedexpansion" erforderlich und auch das Ersetzen ließe sich mit
call set "zeile=%%zeile:%suchen_nach%=%ersetzen_durch%%%"
lösen) weiter verarbeiten.

Grüße
bastla
Bitte warten ..
Mitglied: mafiosi
09.12.2010 um 21:57 Uhr
Vielen Dank bastla für die überaus schnelle Hilfe!

Deine Lösung mit einem VBScript ist wesentlich performanter als mein Ansatz, das ganze komplett in einer Batch zu lösen!

VG

mafiosi
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch um mehrere IP-Adressen via Ping auf Erreichbarkeit zu prüfen (5)

Frage von Galindiesel zum Thema Batch & Shell ...

SAN, NAS, DAS
gelöst QNAP TS-453U - drei IP-Adressen für iSCSI , SMB , Management (2)

Frage von caspi-pirna zum Thema SAN, NAS, DAS ...

SAN, NAS, DAS
QNAP Installationsproblem wenn der Client mehre statische IP-Adressen hat (6)

Erfahrungsbericht von StefanKittel zum Thema SAN, NAS, DAS ...

Sicherheit
Mirai-Botnetz: Dyn bestätigt Angriff von zig-Millionen IP-Adressen

Link von runasservice zum Thema Sicherheit ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...