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

Batch Datei zum Suchen und Ersetzen in einer Textdatei die ein ! enthält

Frage Entwicklung Batch & Shell

Mitglied: bodor21

bodor21 (Level 1) - Jetzt verbinden

18.06.2009, aktualisiert 14:19 Uhr, 10341 Aufrufe, 9 Kommentare

Hallo,

ist mal wieder eine Frage zu Suche und ersetzten. Einige Beispiele aus älteren Beiträgen funktionieren, nur das ! (Ausrufezeichen) verschwindet in der ausgegebenen Datei.

In der Datei Test.txt sind mehrere Zeilen , die so aussehen:

.
.
:Polizei=NOTRUF110,Region=1340,NR=22273,Breite=E341CC0!
:Polizei=NOTRUF110,Region=1540,NR=27873,Breite=E362CC0!

Mit der folgenden Batch funktioniert es, nur das ! (Ausrufezeichen) wird in der ausgegebenen Datei gelöscht.
Das ! (Ausrufezeichen) soll ausserdem noch in ein ; (Semikolon) ersetzt werden, wie geht das.


01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Datei=D:\Test.txt"  
03.
set "Von=:Polizei" 
04.
set "Nach=Waehle:Polizei" 
05.
set "t=%temp%\text.tmp"  
06.
if exist "%t%" del "%t%"  
07.
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%t%"  
08.
move /y "%t%" "%Datei%"

Das Ergebnis sollte so aussehen:

Waehle:Polizei=NOTRUF110,Region=1340,NR=22273,Breite=E341CC0;
Waehle:Polizei=NOTRUF110,Region=1540,NR=27873,Breite=E362CC0;

Danke für die Hilfe eines Anfängers

MfG

bodor
Mitglied: LAMPE1962
18.06.2009 um 16:26 Uhr
Hallo Bodor, mach Dir nicht das Leben schwer mit Batch. Gehe auf http://www.inforapid.de/ , lade Dir "Suchen&Ersetzten runter, und los gehts.

Gruß
Stefan
Bitte warten ..
Mitglied: bodor21
18.06.2009 um 16:35 Uhr
Hallo Stefan,

leider muss ich das in eine andere Batch Datei einbinden , kann das og. Programm also nicht installieren.


Danke für die schnelle Antwort

MfG

bodor
Bitte warten ..
Mitglied: bastla
18.06.2009 um 16:55 Uhr
Hallo bodor21 und willkommen im Forum!

Sollte so gehen:
01.
@echo off & setlocal 
02.
set "Datei=D:\Test.txt"  
03.
set "Von=:Polizei" 
04.
set "Nach=Waehle:Polizei" 
05.
 
06.
set "t=%temp%\text.tmp"  
07.
if exist "%t%" del "%t%"  
08.
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & call :ProcessLine 
09.
move "%t%" "%Datei%" 
10.
goto :eof 
11.
 
12.
:ProcessLine 
13.
call set "Line=%%Line:%Von%=%Nach%%%" 
14.
 
15.
::Ersetzung "!" durch ";" 
16.
set "Line=%Line:!=;%" 
17.
 
18.
>>"%t%" echo %Line% 
19.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Biber
18.06.2009 um 17:14 Uhr
Moin bodor21,

willkommen im Forum.
Wenn eine Lösung des eigentlichen Problems gefragt ist (Strings mit enthaltenenem "!" sind ein bisschen zickig in Verbindung mit DelayedExpansion), dann wäre die Antwort:
  • Benutze "DelayedExpansion" nur "local", da, wo es auch benötigt wird.

01.
@echo off & setlocal disabledelayedexpansion 
02.
set "Datei=D:\Test.txt" set "Von=:Polizei" 
03.
set "Nach=Waehle:Polizei" 
04.
:: set "t=%temp%\text.tmp"  
05.
set "t=con:" 
06.
if exist "%t%" del "%t%"  
07.
for /f "usebackq delims=" %%i in ("%Datei%") do set "line=%%i" & call :ProcessLine 
08.
goto :eof 
09.
 
10.
:ProcessLine -- keine Parameter -- 
11.
   :: solange keine DelayedExpansion gesetzt: Ausrufezeichen ersetzen 
12.
   Set "Line=%Line:!=;%" 
13.
   setlocal Enabledelayedexpansion 
14.
   set Line=!Line:%Von%=%Nach%!  
15.
   echo %Line%>>"%t%"  
16.
   echo [auf echo gesetzt] move /y "%t%" "%Datei%" 
17.
   Endlocal 
18.
goto :eof
Grüße
Biber
Bitte warten ..
Mitglied: bodor21
18.06.2009 um 22:01 Uhr
Hallo Biber,

ist genau das was ich brauche --> DANKE

Eine Frage habe ich aber doch noch

Wie kann ich jede Zeile in meiner Test.txt ab einen bestimmten Wort bis zum Zeilenende löschen.
Das Wort heist: ,Breite
Die Zeilen in der Test.txt sind nicht gleichlang.

Vorher
:Polizei=NOTRUF110,Region=1540,NR=27873,Breite=E362CC0!
:Polizei=NOTRUF110,Region=1540,NR=27874553,Breite=E362C78C0!

nachher

:Polizei=NOTRUF110,Region=1540,NR=27873
:Polizei=NOTRUF110,Region=1540,NR=27874553

MfG

bodor
Bitte warten ..
Mitglied: bastla
18.06.2009 um 22:09 Uhr
Hallo bodor21!

Falls Du auch eine Anwort von mir akzeptierst, dann (ungetestet und unter der Voraussetzung, dass die Datensätze in jeder Zeile den gleichen Aufbau und Kommata als Trennzeichen haben):
01.
@echo off & setlocal 
02.
set "Datei=D:\Test.txt"  
03.
 
04.
set "t=%temp%\text.tmp"  
05.
if exist "%t%" del "%t%"  
06.
for /f "usebackq tokens=1-3 delims=," %%i in ("%Datei%") do >>"%t%" echo %%i,%%j,%%k 
07.
move "%t%" "%Datei%"
Grüße
bastla
Bitte warten ..
Mitglied: Biber
18.06.2009 um 22:19 Uhr
Moin bodor21,

ich würde an Deiner Stelle die Strategie überdenken und nicht mehr zeilenweise denken sonder eher feldweise.

Es scheint ja nur eine endliche Anzahl von "Feldern" in einer Zeile vorkommen zu können, wenn wir als Feldtrenner ein "," annehmen.
[ja, dass die Zeile mit ":" beginnt und mit "!" endet, habe ich wahrgenommen].

Dennoch bleiben x "Felder" mit dem Muster "whatever=wert" zwischen den Trennern "," übrig.

Beispiel am CMD-Prompt:
01.
>for /f "delims=, tokens=1-4" %i in (":Polizei=NOTRUF110,Region=1540,NR=27873,Breite=E362CC0!") do @echo 1[%i] 2[%j] 3[%k] 4[und nicht: %l] 
02.
1[:Polizei=NOTRUF110] 2[Region=1540] 3[NR=27873] 4[und nicht: Breite=E362CC0!]
Jedes dieser einzelnen "Felder" oder auf bätchisch "Token" %i, %j %k..... kannst Du wiederum in zwei Token "whatever" und "wert" zerlegen,
wenn Du in einer zweiten Runde als "Delims==" und "token=1,2" angibst.

Dann kannst Du auch prüfen, ob dieses whatever-token gleich "Breite" heißt und damit umgehen.

Grüße
Biber

[Edit] @bastla
wenn Du auch eine Antwort von mir akzeptierst..
Ich würde keine Antworten von Rechtsüberholern akzeptieren ...
[/Edit]
Bitte warten ..
Mitglied: bodor21
18.06.2009 um 23:02 Uhr
Hallo Ihr Antworter,

natürlich akzeptiere ich Antworten von Jeden, der mir helfen möchte )

Die Datei enthält glücklicherweise nur Datensätze mit "," als Texttrenner und es gibt Zeilen mit 2 unterschiedlichen Feldanzahl.
Da brauche ich den CMD-Promt nur 2 mal mit den unterschiedlichen Tokenanzahl durchlaufen lassen.

Werd ich dann morgen mal testen

Danke @all

MfG

bodor21

... wer lesen kann ist klar im Vorteil
Bitte warten ..
Mitglied: bodor21
28.06.2009 um 22:45 Uhr
Hallo

der Test mit den Zeilenende habe ich nicht durchgeführt, da das mir als Unwissender doch etwas kompliziert ist, bzw. ich z.Z. keine Zeit habe mich da reinzuarbeiten.
Ich lösche den Rest mit der Hand, ist bei 60 bis 150 Zeilen n o c h ... zu vertreten.

Das Suchen und ERsetzten ist auf jeden Fall voll funktionsfähig und somit gelöst.

D A N K E

MfG

bodor21
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen ersetzen mit Sonderzeichen (2)

Frage von GNLen1 zum Thema Batch & Shell ...

Batch & Shell
Batch datei zum Hochladen von Datein auf ftp server (2)

Frage von loxymus zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
DSL, VDSL
gelöst DSL 200m verlängern (15)

Frage von Angela44 zum Thema DSL, VDSL ...

LAN, WAN, Wireless
Per Script auf UniFi-controller zugreifen und WPA2-Key ändern (11)

Frage von Winfried-HH zum Thema LAN, WAN, Wireless ...

Windows Server
SBS 2011 Standard virtualisieren (11)

Frage von HeinrichM zum Thema Windows Server ...

Exchange Server
gelöst DHCP Sever MS Server 2012 Problem (10)

Frage von Florian86 zum Thema Exchange Server ...