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

gelöst Batch um alle gleichen zeichenfolgen in textdatei zu ändern

Mitglied: bernimoses

bernimoses (Level 1) - Jetzt verbinden

18.05.2008, aktualisiert 18.10.2012, 6506 Aufrufe, 15 Kommentare

hi,

ich hab folgendes Problem, ich will (wie die überschrift schon sagt) alle identischen zeichen folgen in einer Textdatei ändern.

z.B.:
Alte Textdatei:
root = 55555
doc = 55555test\
...
Neue Textdatei:
root = C:\Programme\
doc = C:\Programme\test\
...
hier hab ich wie man sieht einfach "55555" mit "C:\Programme\ ersetzt. ( nur leider bekomm ich das nicht mit einer bat hin!!!)
Der Sinn der Sache ist das Aktuelle Verzeichniss anstatt des "C:\" reinzuschreiben.

Hab auch schon das probiert:
@echo off
setlocal enabledelayedexpansion

set "filename=test.txt"
set "tempfile=temp.txt"
set "path=%cd%\"

for /F "delims=" %%a in (%filename%) do (
set text=%%a
set text=!text:55555=%path%!>>%tempfile%
)

del %filename%
ren %tempfile% test.conf
Pause
Des Teil hat mir aber dann die kompltte Datei gelehrt!!

Ich hofe doch das die Genies unter euch mir helfen können *g*

MfG bernimoses
Mitglied: bastla
18.05.2008, aktualisiert 18.10.2012
Hallo bernimoses!

Derlei lässt sich zwar auch mit Batch alleine bewerksteligen (zumindest solange es relativ "einfacher" Text ohne allzuviele Sonderzeichen ist), aber leichter / sicherer geht es mit einem in den Batch integrierten VBScript - für ein Beispiel (dort gleich für alle Textdateien eines Ordners) siehe: https://www.administrator.de/forum/batch-zum-%c3%84ndern-teile-einer-txt ...

Trotzdem Dein (ursprüngliches) Beispiel als native Batch:
01.
@echo off & setlocal
02.
if exist D:\Neue.txt del D:\Neue.txt
03.
for /f "delims=" %%i in (D:\Alte.txt) do set "Zeile=%%i" & call :ProcessLine
04.
goto :eof
05.

06.
:ProcessLine
07.
>>D:\Neue.txt echo %Zeile:ich=du%
Anmerkung: Leerzeilen werden in dieser einfachen Fassung nicht in die Datei "Neue.txt" übernommen.

Grüße
bastla

[Edit] Löschen der ev bereits vorhandenen Zieldatei ergänzt [/Edit]
Bitte warten ..
Mitglied: bastla
18.05.2008 um 22:46 Uhr
... zu Deinem nachgereichten Batch:

Abgesehen davon, dass %path% (da mit dieser - bereits vorhandenen - Systemvariable der Suchpfad auch für externe CMD-Befehle, wie etwa "xcopy", angegeben wird) kein wirklich guter Variablenname für Deinen Zweck ist (wenngleich sich in diesem kurzen Beispiel daraus noch kein Problem ergibt), wäre das letzte "set" durch ein "echo" zu ersetzen.

Außerdem sehe ich keinen Grund für die Verwendung des "tempfiles" - Du könntest gleich in "test.conf" schreiben ...

Noch eine Anmerkung: "delayedexpansion" funktioniert nur zuverlässig, wenn sich in Deiner Textdatei kein "!" befindet.

Grüße
bastla
Bitte warten ..
Mitglied: bernimoses
18.05.2008 um 22:50 Uhr
Also dann anstatt: do set "Zeile=%%i" & call :ProcessLine >> do echo "Zeile=%%i" & call :ProcessLine

oda was?
Danke auf jeden falls *freu*
Bitte warten ..
Mitglied: bastla
18.05.2008 um 22:55 Uhr
... ich hatte das letzte "set" (und die Variable dahinter) in Deinem Batch gemeint, daher:
01.
@echo off
02.
setlocal enabledelayedexpansion
03.

04.
set "filename=test.txt"
05.
set "tempfile=temp.txt"
06.
set "p=%cd%\"
07.

08.
for /F "delims=" %%a in (%filename%) do (
09.
    set text=%%a
10.
    echo !text:55555=%p%!>>%tempfile%
11.
)
12.

13.
del %filename%
14.
ren %tempfile% test.conf
Übrigens: Wenn schon mit %tempfile%, dann zumindest anstelle des "ren" ein "move", damit eine ev schon vorhandene "test.conf" überschrieben wird (und vielleicht doch auch noch, zur Sicherheit, %tempfile% vorweg löschen) ...

Grüße
bastla
Bitte warten ..
Mitglied: bernimoses
18.05.2008 um 23:07 Uhr
Du hast doch vorher gesagt das in dem textfile dann keine "!" sein dürfen. aber blöderweise sind die in meine textfile auch noch mit drin. Da ich sie nicht rauslöschen kann (weill eich dann die config zerstöre) kannst du mir bitte noch mal ein bsp. geben das jetzt genau in meine fall funktioniert?

Danke schonmal.
Bitte warten ..
Mitglied: bastla
18.05.2008 um 23:19 Uhr
Hallo bernimoses!

Das gewünschte Beispiel steht schon (allerdings als Link) in meinem ersten Kommentar - soll heißen, dass Du mit der VBScript-Variante ein derartiges Problem nicht hättest ...

Konkrete Umsetzung für Deinen Fall:
01.
@echo off & setlocal
02.
set "Quelle=test.txt"
03.
set "Ziel=test.conf"
04.
set "Von=55555"
05.
set "Nach=%cd%\"
06.

07.
set R=%temp%\Repl.vbs
08.
echo Set fso=CreateObject("Scripting.FileSystemObject"):F=WScript.Arguments(0):T=fso.OpenTextFile(F).ReadAll:fso.OpenTextFile(F,2,True).Write Replace(T,"%Von%","%Nach%")>%R%
09.

10.
for %%i in ("%Quelle%") do cscript //nologo %R% "%%~i"
11.
move "%Quelle%" "%Ziel%"
Ersetzt wird hier immer gleich in der angegebenen %Quelle% - da Du diese ohnehin löschen willst, könntest Du sie eigentlich auch gleich im Vorhinein auf den gewünschten Namen umbenennen - im Beispiel oben erfolgt dies (per "move") erst nach den Ersetzungen ...

Grüße
bastla

[Edit] Parameter-Schreibweise in "for"-Zeile auf "%%~i" geändert [/Edit]
Bitte warten ..
Mitglied: bernimoses
18.05.2008 um 23:30 Uhr
hm, irgendwie geht das bei mir nicht der sagt Windows script fehler: Zugriff auf windows script host wurde deaktiviert.

Was kann ich machen?
Bitte warten ..
Mitglied: bastla
19.05.2008 um 00:12 Uhr
Hallo bernimoses!

Was kann ich machen?
Wenn wir das Aktivieren des WSH einmal ausschließen wollen, fällt mir eigentlich nur etwas in der Art ein:
01.
@echo off & setlocal
02.

03.
set "filename=test.txt"
04.
set "newfile=test.conf"
05.

06.
set "p=%cd%\"
07.
set "o=55555"
08.

09.
if exist "%newfile%" del "%newfile%"
10.

11.
for /F "usebackq delims=" %%a in ("%filename%") do set "Zeile=%%a" & call :ProcessLine
12.

13.
:: del "%filename%"
14.
goto :eof
15.

16.
:ProcessLine
17.
set "Zeile=%Zeile:!=§%"
18.
setlocal enabledelayedexpansion
19.
set "Zeile=!Zeile:%o%=%p%!
20.
setlocal disabledelayedexpansion
21.
>>%newfile% echo %Zeile:§=!%
Hier wird zunächst jedes "!" durch ein "§" (bzw, wenn Du keinen ASCII-Editor verwendest, durch "°") ersetzt. Danach wird, unter Verwendung der ("dazugeschalteten") "delayedexpansion" die Ersetzung mit den Variablen %o% und %p% vorgenommen und abschließend (jetzt wieder ohne "delayedexpansion") werden die "!" wieder hergestellt und die Zeile gleich in die Zieldatei geschrieben.

Das Löschen der Ausgangsdatei habe ich, zumindest für die Testphase, durch "::" auskommentiert.

Grüße
bastla

[Edit] Auf Variante ohne Temporärdateien abgeändert [/Edit]
Bitte warten ..
Mitglied: bernimoses
19.05.2008 um 14:11 Uhr
Ich bekomms nicht hin,
Jetzt löscht er zwar nicht mehr die komplette datei, schreib aber in die neue datei nur die ersten 4 zeilen der alten.
Am besten ich geb dir mal die datei. Bei der sind halt nicht die "5" zu ersetzten sondern die "X".

http://uploaded.to/?id=xptg3d

So hoffe das du mir helfen kannst.

EDIT: Ich glaub ich weis an was das liegt: In der Datei sind lauter Sonderzeichen und bei dem ersten "<" bricht er dann einfach ab. muss man die dann auch erst in ein anders zeichen umwandeln? Denk schon! Würdest du das hinbekommen? Danke
Bitte warten ..
Mitglied: bastla
19.05.2008 um 15:14 Uhr
Hallo bernimoses!

Es wird Zeit für etwas Vernünftiges ...

Wenn es kein VBScript sein darf, lade Dir zB von hier eine Windows-Version von "sed" herunter, lege die "sed.exe" in einen beliebigen Ordner (in meinem Beispiel unten wäre das "C:\Scripts") und verwende folgende Zeile:
01.
type httpd.conf|C:\Scripts\sed s/xxxxxxxxxx/%cd%/g>test.conf
Grüße
bastla
Bitte warten ..
Mitglied: bernimoses
19.05.2008 um 15:24 Uhr
hm, kann es sein dass ich sau doof bin wenn ich des in ne bat zu dan löshct er wieder alles xD
und aus der hilfe zu dem prog werd ich auch ned schlau kannste bitte nur ganz kurz die batch reinschreiben. Schonmal super spitzen mäsigen Dank an dich...

g berni
Bitte warten ..
Mitglied: bastla
19.05.2008 um 16:12 Uhr
Hallo bernimoses!

Du brauchst nur diese eine Zeile ...

Grüße
bastla
Bitte warten ..
Mitglied: bernimoses
19.05.2008 um 16:23 Uhr
hm, geht aber eben ned.

Hab die sed.exe in C:\Scripts\ getan und in die batchdas rein:

@echo off
type httpd.conf|C:\Scripts\sed s/xxxxxxxxxx/%cd%/g>test.conf


Aber das geht ned...
Er sagt immer "s inkorrekt option" *ratlos*
Bitte warten ..
Mitglied: bastla
19.05.2008 um 16:49 Uhr
Hallo bernimoses!

Versuch es mal so:
01.
type httpd.conf|C:\Scripts\sed s/xxxxxxxxxx/"%cd:\=\\%"/g>test.conf
Grüße
bastla
Bitte warten ..
Mitglied: bernimoses
19.05.2008 um 17:36 Uhr
Supa Danke funktioniert perfekt Danke Danke Danke... auch für die tolle Hilfe

Greets berni
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
EQU - GLEICH - BATCH
gelöst Frage von freshman2017Batch & Shell9 Kommentare

Hallo, im nachfolgendem Batch: GTR mit EQU ersetzen, also EQU Mustermann OR Musterfrau OR Fraumuster. Also wenn in %%r ...

Batch & Shell
Batch Textdatei Spaltenweise auslesen
Frage von PinkFLuffyUnicornBatch & Shell7 Kommentare

hi, ist es irgendwie möglich anstatt eine Textdatei via Batch Spaltenweise auszulesen und nicht zeilenweise wie das normal ganz ...

Batch & Shell
Textdatei verschlüsseln per Batch
gelöst Frage von Nick2212Batch & Shell22 Kommentare

Hi Leute ich wollte einmal fragen ob es eine Möglichkeit gibt, den Inhalt einer Textdatei per Batch zu verschlüsseln ...

Batch & Shell
Batch: Textdatei Zeilenweise auslesen
gelöst Frage von CreatorXBatch & Shell2 Kommentare

Hallo, ich weiß, zu dem Thema gibt es schon unzählige Threads. Ich hab auch einiges dazu gefunden und trotzdem ...

Neue Wissensbeiträge
Internet

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

Information von Frank vor 1 StundeInternet1 Kommentar

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

Windows 10

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

Information von kgborn vor 5 StundenWindows 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 1 TagWindows 102 Kommentare

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

Sicherheit

Heise Beitrag Passwort-Sammlung mit 773 Millionen Online-Konten im Netz aufgetaucht

Information von Penny.Cilin vor 1 TagSicherheit6 Kommentare

Auf Heise Online ist folgender Beitrag veröffentlicht worden: Heise Beitrag passwörter geleakt Ich bin mir jetzt nicht ganz sicher, ...

Heiß diskutierte Inhalte
Switche und Hubs
Medienkonverter mit 12 oder 24 Ports gesucht
Frage von wmuellerSwitche und Hubs23 Kommentare

Guten Morgen, ich bin auf der Suche nach einem größeren Medienkonverter, der "stumpf" 1:1 die Ports auf über ein ...

Windows Server
Uhren gehen immer wieder falsch
Frage von killtecWindows Server23 Kommentare

Hallo, ich habe folgende Konstellation: 1. Physischer DC Div. Virtuelle DC's auf Hyper-V Servern Die Hyper-V-Server, der Physische DC ...

Debian
OpenSSH Login mit Public Key schlägt fehl, mit Passwort funktioniert
gelöst Frage von DKowalkeDebian19 Kommentare

Hallo zusammen, ich hatte hier schon nach einer Anleitung für einen SFTP Server mit Linux gefragt, habe dort auch ...

Windows Server
Client in die Domäne einbinden - Allgemeine Frage dazu
gelöst Frage von RalphTWindows Server19 Kommentare

Moin, ich habe 2 DCs in einer Hauptstelle und 2 DCs in einer Nebenstelle. Ich bringe in der Hauptstelle ...