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

Frage Entwicklung Batch & Shell

Mitglied: bernimoses

bernimoses (Level 1) - Jetzt verbinden

18.05.2008, aktualisiert 18.10.2012, 6458 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: http://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
Batch zum ändern einer Textdatei
gelöst Frage von weboadmixBatch & Shell5 Kommentare

Hallo zusammen, suche hier etwas verzweifelt nach Hilfe, um mit einer Batchdatei eine Textdatei zu durchsuchen und eine Zeile ...

Batch & Shell
Zeichenfolge in Textdatei durch Inhalt einer Umgebungsvariable ersetzen
gelöst Frage von SarekHLBatch & Shell7 Kommentare

Hallo zusammen, wie kann ich mittels Batch in einer Textdatei die Zeichenfolge durch den Inhalt der Umgebungsvariable %username% ersetzen? ...

Batch & Shell
Die Zeichenfolge hat kein Abschlusszeichen - Batch mit mehrzeiligem Powershellbefehl
gelöst Frage von freshman2017Batch & Shell11 Kommentare

Hallo, leider finde ich hier den Fehler nicht, in der Doku finde ich auch nichts. Wer kann mir auf ...

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 ...

Neue Wissensbeiträge
Datenschutz

Weitere Inforamtionen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 5 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 7 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 10 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 16 StundenErkennung und -Abwehr2 Kommentare

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücken Spectre, Meltdown ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1017 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...