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, 10320 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

Mit freundlichen Grüßen

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

Mit freundlichen Grüßen

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

Mit freundlichen Grüßen

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

Mit freundlichen Grüßen

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

Mit freundlichen Grüßen

bodor21
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (24)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...