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

Batch Ausrufezeichen beim suchen ersetzen nicht löschen

Mitglied: porteiner

porteiner (Level 1) - Jetzt verbinden

03.11.2011, aktualisiert 18.10.2012, 5168 Aufrufe, 7 Kommentare

Hallo zusammen

Ich habe folgendes Problem. Ich möchte in einer Textdatei "Andeer" durch "Zillis" ersetzen. Unten ist der Code, den ich hier "https://www.administrator.de/index.php?content=118497" gefunden habe.
Das ersetzen funktioniert auch.

Problem:
In der Textdatei hat es auch ! (Ausrufezeichen). Diese werden nach dem ausführen des Batches leider gelöscht. Leere Zeilen werden auch gelöscht. Gibt es eine Möglichkeit, wie ich das verhindern kann? Also das wirklich nur "Andeer" durch "Zillis" ersetzt wird und sonst nichts an der Text-Datei geändert wird?

set "Datei_Vorlage_Andeer=c:\Vorlage.txt"
set "Von=Andeer"
set "Nach=Zillis"
set "t=c:\Vorlage_neu.txt"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei_Vorlage_Andeer%") do set "Line=%%i" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%t%"

Besten Dank für Euere Hilfe
Gruss
porteiner
Mitglied: Skyemugen
03.11.2011 um 14:01 Uhr
Aloha,

da wäre ein von bastla gefuchster vbs-inliner sinnvoll zu nutzen:
01.
@echo off & setlocal 
02.
set "R=%temp%\ReplaceAll.vbs" 
03.
if not exist "%R%" >"%R%" echo Set fso=CreateObject("Scripting.FileSystemObject"):Set a=WScript.Arguments:T=fso.OpenTextFile(a(0)).ReadAll:fso.CreateTextFile(a(0)).Write Replace(T,a(1),a(2)) 
04.
 
05.
set "Datei=testdatei.txt" 
06.
set "Alt=Andeer" 
07.
set "Neu=Zillis" 
08.
cscript //nologo "%R%" "%Datei%" "%Alt%" "%Neu%"
Denn per batch wäre zwar noch einfach die Umsetzung ohne delayedexpansion (was dazu führt, dass Ausrufezeichen entfernt werden, da sie als Variablen interpretiert werden) per Unterprogramm und call, allerdings das Wiedereinführen der Leerzeilen ist doch ein wenig Umständlich (auch wenn wir das bereits alles hier mehrfach hatte...) wenn auch nicht unmöglich.

Hierbei gibt es auch keine neue Output-Datei, sondern die existierende wird dabei direkt umgearbeitet.

greetz André

P.S.: Wenn du nur in einer Textdatei ersetzen willst ... Texteditor deiner Wahl öffnen, Suchen/Ersetzen auswählen, Zeugs eintragen, durchführen, fertig ...
Bitte warten ..
Mitglied: bastla
03.11.2011, aktualisiert 18.10.2012
@skye
allerdings das Wiedereinführen der Leerzeilen ist doch ein wenig Umständlich
Naja
01.
@echo off & setlocal 
02.
set "Datei_Vorlage_Andeer=c:\Vorlage.txt" 
03.
set "Von=Andeer" 
04.
set "Nach=Zillis" 
05.
set "t=c:\Vorlage_neu.txt" 
06.
 
07.
if exist "%t%" del "%t%" 
08.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Datei_Vorlage_Andeer%"') do set "Line=%%j" & call :ProcessLine 
09.
goto :eof 
10.
 
11.
:ProcessLine 
12.
setlocal enabledelayedexpansion 
13.
(if defined Line (echo !Line:%Von%=%Nach%!) else (echo())>>"%t%" 
14.
endlocal 
15.
goto :eof
Grüße
bastla

P.S.: Ein jeb-the-batcher-mäßiges
(echo())>>"%t%"
sieht viel lustiger aus als ein schnödes
(echo.))>>"%t%"
Bitte warten ..
Mitglied: Skyemugen
03.11.2011 um 14:48 Uhr
pfff ich hab' mich nur extra so ausgedrückt, um nicht nachdenken zu müssen, weil ich i.d.R. sowieso nie mit if defined arbeite und mir das darum eh nicht in den Sinn kommt ... den vbs-inliner hab' ich immer griffbereit ^__^
Bitte warten ..
Mitglied: jeb-the-batcher
04.11.2011 um 10:31 Uhr
Das ganze läßt sich auch mit einer minimalen Änderung zum laufen bringen

Original, nur schöner formatiert
01.
set "Datei_Vorlage_Andeer=c:\Vorlage.txt" 
02.
set "Von=Andeer" 
03.
set "Nach=Zillis" 
04.
set "t=c:\Vorlage_neu.txt" 
05.
if exist "%t%" del "%t%" 
06.
setlocal EnableDelayedExpansion 
07.
for /f "usebackq delims=" %%i in ("%Datei_Vorlage_Andeer%") do ( 
08.
  set "Line=%%i" 
09.
  set Line=!Line:%Von%=%Nach%! 
10.
  echo !Line!>>"%t%" 
11.
)
geänderter Code
01.
set "Datei_Vorlage_Andeer=c:\Vorlage.txt" 
02.
set "Von=Andeer" 
03.
set "Nach=Zillis" 
04.
set "t=c:\Vorlage_neu.txt" 
05.
if exist "%t%" del "%t%" 
06.
setlocal DisableDelayedExpansion 
07.
08.
  for /f "delims=" %%i in ('findstr /n "^" "%Datei_Vorlage_Andeer%"') do ( 
09.
    set "Line=%%i" 
10.
    setlocal EnableDelayedExpansion 
11.
    set "Line=!Line:*:=!"  Löschen der Zeilennummer 
12.
    set "Line=!Line:%Von%=%Nach%!" 
13.
    (echo(!Line!) 
14.
    endlocal 
15.
16.
) > %t%
Wo ist der große Unterschied?
Zum kann es Leerzeilen bearbeiten, weil das findstr /n einfach vor jede Zeile die Zeilennummer packt in der Form 17:Meine Zeile

Im Gegensatz zu bastla setze ich delims lieber auf gar nichts, weil sonst werden bei Zeilen mit Doppelpunkten diese gleich mit entfernt,
aus "::Meine Zeile" wird dann einfach "Meine Zeile".

Um die Ausrufezeichen beizubehalten ist es nur wichtig die Expansion von %%i im Modus Disabled Delayed Expansion durchzuführen, danach kann man gefahrlos wieder DelayedExpansion aktivieren.

Dann entferne ich mit "set Line=!Line=*:=!" die Zeilennummer mit Doppelpunkt.

Den ganzen Block nochmal geklammert und dann den ganzen Block nach "> %t%" umleiten, spart das löschen und ist viel schneller.

jeb
Bitte warten ..
Mitglied: bastla
04.11.2011 um 15:08 Uhr
@jeb
Bis auf die Tatsache, dass bei Deiner zweiten Version aus einer Leerzeile im Ergebnis
Andeer=Zillis
wird, ist das sicherlich die bessere Variante ...

Grüße
bastla

P.S.: Der Genauigkeit halber:
weil sonst werden bei Zeilen mit führenden Doppelpunkten diese gleich mit entfernt
Bitte warten ..
Mitglied: jeb-the-batcher
05.11.2011 um 10:10 Uhr
@bastla

Genau das passiert natürlich immer wenn man den Kram nicht testet

An der Stelle reicht es die beiden Zeilen zu tauschen

01.
    set "Line=!Line:%Von%=%Nach%!"  
02.
    set "Line=!Line:*:=!"  Löschen der Zeilennummer 
Grüße
jeb
Bitte warten ..
Mitglied: porteiner
07.11.2011 um 07:27 Uhr
Hallo Zusammen

Besten Dank für die Hilfe, ich werde sie in einer ruhigen Minute testen und informieren, ob es bei mir auch funktioniert hat.
Gruss
poreiner
Bitte warten ..
Ähnliche Inhalte
Entwicklung
Suchen und ersetzen als Batch oder VBA
gelöst Frage von ZinedineEntwicklung22 Kommentare

Hallo, bin hier neu im Forum und ein absoluter Laie was Programmierung betrifft Habe deswegen auch ein großes für ...

Batch & Shell
Suchen und Ersetzen per Batch
gelöst Frage von m8ichaelBatch & Shell5 Kommentare

Hallo zusammen, ich suche eine Lösung, um innerhalb einer Textdatei einen Wert zu suchen und anschließend zu ersetzen. Ich ...

Batch & Shell

Suchen und Ersetzen mehrerer Suchbegriffe per Batch

gelöst Frage von makroll10Batch & Shell4 Kommentare

Hallo, ich habe eine Textdatei mit folgendem Inhalt (Beispiel): "Dies ist ein Text mit 1850101 oder auch mit 1750102 ...

Batch & Shell

Batch Zeile suchen und ersetzen Variabler Pfad

gelöst 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
E-Mail
Email-Apps und Verhalten bei Pop3
Erfahrungsbericht von kfranzk vor 1 TagE-Mail4 Kommentare

Hallo Freunde, da mir mein diesbezüglicher Faden als gelöst markiert wurde, muss ich hier neu aufsetzen. Ich arbeite bewusst ...

Hyper-V

Optimiertes Ubuntu per Microsoft Hyper-V-Schnellerstellung verfügbar

Anleitung von Frank vor 1 TagHyper-V

Für Microsofts Virtualisierungssoftware Hyper-V ist ab sofort auch ein optimiertes Ubuntu 18.04.1 LTS verfügbar. In der "Hyper-V-Schnellerstellung" App, die ...

Sicherheits-Tools

Trend Micro WorryFree Business Security (WFBS) 10 - neuer Patch 1470 verfügbar

Tipp von VGem-e vor 1 TagSicherheits-Tools1 Kommentar

Servus, mal sehen, ob mit Patch 1470, zu finden unter dann die angeblich fehlerhafte Funktion, die unter W10 im ...

Server-Hardware

Lösung für Ersatz eines defekter Raid-Controllers

Anleitung von wellknown vor 1 TagServer-Hardware4 Kommentare

Hallo, da ich nichts gefunden habe und selbst eine Lösung brauchte, hier eine kleine Anleitung für alle die vor ...

Heiß diskutierte Inhalte
Windows Server
Mit der alten Domäneprofil anmelden ohne Server
gelöst Frage von SyosseWindows Server37 Kommentare

Hallo Jungs Folgendes Szenario: Ich habe bei einem sehr kleinen Unternehmen (2Personen) den Server migriert, soweit hat alles geklappt. ...

Sicherheits-Tools
Virenprogramm lässt Programme nicht starten
Frage von SurferGirlSicherheits-Tools23 Kommentare

Hallo, ich bin neu hier, ich hoffe ich habe die richtige Rubrik gewählt. Falls nicht, tut es mir leid. ...

Windows Server
SQL Server Instanz (Eplan) auf WIN 2008 RC2 Server frisst RAM ohne Limit
Frage von derinderinderinWindows Server17 Kommentare

Hallo Zusammen, Wir haben hier einen Windows 2008 RC2 Server. Darauf läuft ein SQL Server Express 2014 Version 12.0.4232.0. ...

Windows 10
Best Practice für Schulungsräume
Frage von Sn0wFoxWindows 1016 Kommentare

Hallo, leider bin ich auch nach langer Suche nicht auf eine zufriedenstellende Nicht-Cloud-Lösung gestoßen und wollte mal Fragen ob ...