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, 5254 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
Batch & Shell
Wlan-adapter such algorithmus in batch
gelöst Frage von TicoWriteBatch & Shell7 Kommentare

Hallo zusammen, Ich möchte einen Wlan-adpater such algorithmus in batch erstellen, dazu fehlt mir aber der befehl in Dos. ...

Exchange Server
Such-Index nach Neuerstellung defekt
Frage von CoverianExchange Server

Guten Morgen zusammen, wir haben hier aktuell ein Problem das mir schlaflose Nächte bereitet. Es handelt sich um einen ...

Video & Streaming

Such möglichkeit metadaten aus avi (bspw. den titel) zu entfernen (als batch file)

Frage von freeuser616Video & Streaming7 Kommentare

hallo zusammen, leider werde ich einfach nicht fündig. ich habe noch einiges an avi Dateien in meiner Sammlung, wo ...

Exchange Server

Exchange-Fehler: 550 No such recipient here

gelöst Frage von GreysonExchange Server3 Kommentare

Hallo administrator.de, habe seit heute an meinem Exchange die Fehlermeldung: #550 No such recipient here Diese Meldung erhalte ich ...

Neue Wissensbeiträge
Windows Mobile

Support für Windows Mobile endet im Dezember 2019

Information von transocean vor 8 StundenWindows Mobile

Moin, MS empfiehlt als Alternative den Umstieg auf IOS oder Android, wie man hier lesen kann. Gruß Uwe

Internet

Kommentar: Bundesregierung erwägt Ausschluss von Huawei im 5G-Netz - Unsere Presse wird immer sensationsgieriger

Information von Frank vor 2 TagenInternet5 Kommentare

Hier mal wieder ein schönes Beispiel für fehlgeleiteten Journalismus und Politik zugleich. Da werden aus Gerüchten plötzlich Fakten, da ...

Windows 10

Netzwerk-Bug in allen Windows 10-Versionen durch Januar 2019-Updates

Information von kgborn vor 2 TagenWindows 101 Kommentar

Nur ein kurzer Hinweis für Admins, die Windows 10-Clients im Portfolio haben. Mit den Updates vom 8. Januar 2019 ...

Windows 10

Windows 10 V1809: Rollout ist gestartet - kommt per Windows Update

Information von kgborn vor 3 TagenWindows 102 Kommentare

Eine kurze Information für die Admins, die Windows 10 im Programm haben. Microsoft hat die letzte Baustelle (die Inkompatibilität ...

Heiß diskutierte Inhalte
TK-Netze & Geräte
TAPI auf einem Win2016Server installieren und einrichten
Frage von wstabelTK-Netze & Geräte32 Kommentare

Hallo liebe Admins, ich habe folgende Situation: 1 Windows Server 2016 Standard als DC 1 SNOM 710 IP-Telefon 1 ...

Off Topic
Darf ich ein Forum erstellen das Produkte eines Herstellers betrifft?
Frage von cyberwallOff Topic8 Kommentare

Hallo Community, ich habe da eine "rechtliche" bzw. allgemeine Frage zum erstellen von Foren. Darf ich als "normale Person" ...

Router & Routing
Unbekannte IPv4 Adresse im Routerprotokoll(Portweiterleitung)
gelöst Frage von tklustigRouter & Routing6 Kommentare

Hallo Leute, folgender Screenshot(ScanVersusPortForwarding.jpg) zeigt die im Routerprotokoll aufgezeigten Portweiterleitungen und alle von einem IPScanner eruierten IPv4 Adressen in ...

Monitoring
Netzwerk bzw VPN wird lahm
Frage von HenereMonitoring5 Kommentare

Servus zusammen, Netzwerk (bzw die Verbindung) sieht so aus: VM-Daten -> 1GBe -> Zyxel USG60W -> VLAN 1GBe -> ...