xkinix
Goto Top

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!"
"%t%" echo %L%
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.

Content-ID: 169041

Url: https://administrator.de/contentid/169041

Ausgedruckt am: 08.11.2024 um 02:11 Uhr

mathe172
mathe172 04.07.2011 um 10:22:31 Uhr
Goto Top
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 face-wink) 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
xkinix
xkinix 04.07.2011 um 15:15:22 Uhr
Goto Top
Hallo
habe mit dem Quelltext-Link alles markiert eine neue txt datei erzeugt und eingefügt. Habe alles mit dem Win Editor gemacht und wieder mit dem Notepad++ es funktioniert nicht die endung der datei ist .bat, ist das richtig?
Dann mann eine datei hochladen?
Vielen dank
mathe172
mathe172 04.07.2011 um 17:16:07 Uhr
Goto Top
Hallo,

wie hast du die Datei gespeichert? Wie schaut das Symbol der Datei aus?
Wenn du die Eigenschaften anschaust, (Rechtsklick-->Eigenschaften) welcher Dateityp wird angegeben?
Und wenn es eine Batch ist, was passiert, wenn du sie auf die Konsole (Win+R-->cmd.exe) ziehst und Enter drückst?

Mathe172
xkinix
xkinix 04.07.2011 um 18:06:31 Uhr
Goto Top
Hallo
Das Symbol der Datei sin Zahnräder.
Unter Eigenschaften steht das es eine Windows-Batchdatei (.bat) ist.
Unter der Konsole (Win+R-->cmd.exe) habe ich die meldung "Das System kann die angegebene Datei nicht finden."
Die 2 text dateien mit den ensprechenden bezeichnungen sind genau da auf D: wo sie sen solle.

In Der "Ersetzungsliste.txt" steht nur
r;ß
2;ö
zu erst suchen;ersetzen
ist das richtig,?
in der "Test.txt" datei steht nur ein "r" und eine "2" drinnen.
ist das richtig?
Kini
bastla
bastla 04.07.2011 um 18:23:09 Uhr
Goto Top
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
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine
auf
for /f "delims=" %%i in ('findstr /n "^" "%Datei%"') do set "Line=%%i" & call :ProcessLine
Hintergrund: Jede Zeile hat einen Anfang ("^"), aber nicht jede ein Ende ($) face-wink (siehe zur Bedeutung der Suchbegriffe "findstr /?") ...

Grüße
bastla
xkinix
xkinix 04.07.2011 um 18:33:27 Uhr
Goto Top
Vielen dank
es funktioniert.

Wie kann mann alle text dateine eines besimten ortner durchsuchen/ersetzen ohne das mann immer wieder den Dateinamen eintragen muß?

nochmal vielen dank
bastla
bastla 04.07.2011 um 18:41:33 Uhr
Goto Top
Hallo xkinix!
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
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
bastla
bastla 04.07.2011 um 18:45:56 Uhr
Goto Top
Nachtrag: Variablennamen der jeweiligen Datei noch verändert (auf %%d)

Grüße
bastla
xkinix
xkinix 04.07.2011 um 19:00:06 Uhr
Goto Top
Zitat von @bastla:
Nachtrag: Variablennamen der jeweiligen Datei noch verändert (auf %%d)

Grüße
bastla
Muss ich noch was endern,
Habe den Code in meine datei eingefügt und über die Console Laufen lassen.
Das wurde aus gegeben.
1datei wurde verschoben.

Ich mach mir einen Ordner auf D:\test
in diesem ortner befinden sich 2 oder merere .txt dateien.
Muss ich das so endern "set "Ordner=D:\test""???
bastla
bastla 04.07.2011 um 19:09:14 Uhr
Goto Top
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 ...
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"
Grüße
bastla
xkinix
xkinix 04.07.2011 um 19:24:16 Uhr
Goto Top
vielen dank
alles funktioniert.

Habe viele untertitel dateien und die haben sonderzeichen und mann kann schlecht lesen.
Jetzt mache ich das in einem rutsch.
Danke

Habe doch noch was.

Wie würde die syntaxe lauten für den aktuelen Ortner?
set "Ordner=D:\test"
set "Liste=D:\test\Ersetzungsliste.xtx" habe die endung meiner Ersetzungsliste geendert damit sie nicht kaut gemacht wird.

Trotz allem vielen dank