Suchen ersetzen per batch in einer TXT im aktuelen ordner vo die Batch liegt.
Habe diesen beitrag gefunden."Suchen ersetzen per batch in einer TXT"
Hallo
Habe diesen beitrag gefunden."Suchen ersetzen per batch in einer TXT" und genau das brauche ich.
Nur kann ich das nicht umsetzen. habe alles in eine Batch datei rein kopiert aber bei mir funktioniert es nicht.
Bin neu in sachen scripte. Brauche eine batch datei die mir am besten im gleichen Ordner alle text datein durchsucht z.b. nacheinem zeichen "%" und durch dieses ersetzt "§".
In diesem Beitrag "Suchen ersetzen per batch in einer TXT" ist genau das brauche ich mit dieser zusetzlichen datei wo mann merere sachen suchen und ersetzen kann.
Ich hoffe das ich das darf.
Hallo maracapuccino und willkommen hier im (erstaunlichen ) Forum!
Das könnte so gehen (und ich meine "gehen", denn bei 1000 Ersetzungspaaren gehe ich nicht von "laufen" aus):
Quelltext | in den Speicher kopieren | drucken
@echo off & setlocal enabledelayedexpansion
set "Datei=D:\Test.txt"
set "Liste=D:\Ersetzungsliste.txt"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine
move "%t%" "%Datei%"
goto :eof
:ProcessLine
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"
if not defined L >>"%t%" echo\& goto :eof
for /f "usebackq tokens=1-2 delims=;" %%s in ("%Liste%") do set "L=!L:%%s=%%t!"
goto :eof
Für die Datei "Ersetzungsliste.txt" wird, wie in Deinem Vorschlag oben, ";" als Trennzeichen zwischen altem und neuem Wert verwendet - sollte das Semikolon in einem der Werte selbst vorkommen, müsstest Du ein anderes Trennzeichen suchen und in der Datei und in Zeile 14 des Batches (nach "delims=") verwenden.
Hallo
Habe diesen beitrag gefunden."Suchen ersetzen per batch in einer TXT" und genau das brauche ich.
Nur kann ich das nicht umsetzen. habe alles in eine Batch datei rein kopiert aber bei mir funktioniert es nicht.
Bin neu in sachen scripte. Brauche eine batch datei die mir am besten im gleichen Ordner alle text datein durchsucht z.b. nacheinem zeichen "%" und durch dieses ersetzt "§".
In diesem Beitrag "Suchen ersetzen per batch in einer TXT" ist genau das brauche ich mit dieser zusetzlichen datei wo mann merere sachen suchen und ersetzen kann.
Ich hoffe das ich das darf.
Hallo maracapuccino und willkommen hier im (erstaunlichen ) Forum!
Das könnte so gehen (und ich meine "gehen", denn bei 1000 Ersetzungspaaren gehe ich nicht von "laufen" aus):
Quelltext | in den Speicher kopieren | drucken
@echo off & setlocal enabledelayedexpansion
set "Datei=D:\Test.txt"
set "Liste=D:\Ersetzungsliste.txt"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine
move "%t%" "%Datei%"
goto :eof
:ProcessLine
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"
if not defined L >>"%t%" echo\& goto :eof
for /f "usebackq tokens=1-2 delims=;" %%s in ("%Liste%") do set "L=!L:%%s=%%t!"
"%t%" echo %L%
Für die Datei "Ersetzungsliste.txt" wird, wie in Deinem Vorschlag oben, ";" als Trennzeichen zwischen altem und neuem Wert verwendet - sollte das Semikolon in einem der Werte selbst vorkommen, müsstest Du ein anderes Trennzeichen suchen und in der Datei und in Zeile 14 des Batches (nach "delims=") verwenden.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 169041
Url: https://administrator.de/contentid/169041
Ausgedruckt am: 08.11.2024 um 02:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo,
wenn du wirklich alles so in die Batch kopiert hast, kein wunder dass es nicht funktioniert. Bei der Code-Formatierung im Forum(darfst auch du benutzen ) musst du nur den Code in dem grauen Rahmen kopieren-am einfachsten mit dem Quelltext-Link.
Versuch mal nur das zu kopieren:
MfG,
Mathe172
wenn du wirklich alles so in die Batch kopiert hast, kein wunder dass es nicht funktioniert. Bei der Code-Formatierung im Forum(darfst auch du benutzen ) musst du nur den Code in dem grauen Rahmen kopieren-am einfachsten mit dem Quelltext-Link.
Versuch mal nur das zu kopieren:
@echo off & setlocal enabledelayedexpansion
set "Datei=D:\Test.txt"
set "Liste=D:\Ersetzungsliste.txt"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine
move "%t%" "%Datei%"
goto :eof
:ProcessLine
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"
if not defined L >>"%t%" echo\& goto :eof
for /f "usebackq tokens=1-2 delims=;" %%s in ("%Liste%") do set "L=!L:%%s=%%t!"
>>"%t%" echo %L%
goto :eof
MfG,
Mathe172
Hallo xkinix und willkommen im Forum!
Soferne Du nur eine Zeile in der "Test.txt" hast und diese nicht mit einer Zeilenschaltung endet, wird der Batch in der obigen Form tatsächlich nicht funktionieren - ändere daher die Zeile
auf
Hintergrund: Jede Zeile hat einen Anfang ("^"), aber nicht jede ein Ende ($) (siehe zur Bedeutung der Suchbegriffe "
Grüße
bastla
Soferne Du nur eine Zeile in der "Test.txt" hast und diese nicht mit einer Zeilenschaltung endet, wird der Batch in der obigen Form tatsächlich nicht funktionieren - ändere daher die Zeile
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine
for /f "delims=" %%i in ('findstr /n "^" "%Datei%"') do set "Line=%%i" & call :ProcessLine
findstr /?
") ...Grüße
bastla
Hallo xkinix!
Bitte beachten: Wenn die Ersetzungsliste ebenfalls im angesprochenen Ordner liegt, sollte sie nicht den Dateityp ".txt" haben, da sie ansonsten auch "bearbeitet" würde ...
Grüße
bastla
Wie kann mann alle text dateine eines besimten ortner durchsuchen/ersetzen
In diesem Fall einfach noch eine weitere Schleife verwenden - ungetestet etwa so:@echo off & setlocal enabledelayedexpansion
set "Ordner=D:\"
set "Liste=D:\Ersetzungsliste.txt"
pushd "%Ordner%"
set "t=%temp%\text.tmp"
for /f "delims=" %%d in ('dir /b *.txt') do (
del "%t%" 2>nul
for /f "delims=" %%i in ('findstr /n "^" "%%d"') do set "Line=%%i" & call :ProcessLine
move "%t%" "%%d"
)
popd
goto :eof
:ProcessLine
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"
if not defined L >>"%t%" echo\& goto :eof
for /f "usebackq tokens=1-2 delims=;" %%s in ("%Liste%") do set "L=!L:%%s=%%t!"
>>"%t%" echo %L%
goto :eof
Grüße
bastla
Hallo xkinix!
Ich habe inzwischen den letzten Stand des Batches (allerdings mit geändertem Speicherort der "Ersetzungsliste.txt" - diese darf, wie oben erwähnt, entweder nicht den Typ ".txt" haben oder nicht im vorgegebenen Ordner, also im Beispiel "D:\", liegen) erfolgreich getestet ...
Die Änderung des Ordnerpfades in "D:\test" in Zeile 2 wäre ok - die Zeile müsste dann so aussehen:
Grüße
bastla
Ich habe inzwischen den letzten Stand des Batches (allerdings mit geändertem Speicherort der "Ersetzungsliste.txt" - diese darf, wie oben erwähnt, entweder nicht den Typ ".txt" haben oder nicht im vorgegebenen Ordner, also im Beispiel "D:\", liegen) erfolgreich getestet ...
Habe den Code in meine datei eingefügt und über die Console Laufen lassen.
Nur zur Sicherheit: Der Code sollte der alleinige Inhalt der Batch-Datei sein ...Die Änderung des Ordnerpfades in "D:\test" in Zeile 2 wäre ok - die Zeile müsste dann so aussehen:
set "Ordner=D:\test"
bastla