Per Batch in einer Textdatei nach einem String suchen und dann gesamte Zeile ersetzen
Hallo Community,
ich habe folgendes Problem mit einer Batch, die mir zwei Zeilen in einer Textdatei ersetzen soll. Zunächst habe ich dieses funktionierende Script genutzt um die beiden Zeilen zu ersetzen:
Nun ist es aber so, dass der zu ersetzende Text nicht unbedingt an Stelle X oder Y (hier Zeile 1 und 2) auftaucht, d.h. dass ich nach einer bestimmten Zeichenkette ( z.B. abc.app.filename und abc.app.URL ) suchen müsste um dann die komplette Zeile zu ersetzen. Mit folgendem Versuch die for-Schleife zu ändern bin ich bislang gescheitert:
Das funktioniert solange in der Zeile auch nur die genaue Zeichenkette
abc.app.filename
steht, aber die Zeile sieht in etwas so aus:
user_pref("abc.app.filename", "file:///D:/test.txt");
Und dann funktioniert es mit dem Ersetzen leider nicht und die geänderte Zeile sieht im Ergebnis so aus:
user_pref("abc.app.filename", "file
Die Zeile wird am Ende also einfach beschnitten. Leider sind meine Kenntnisse rudimentär und ich komme an dieser Stelle nicht mehr weiter. Eventuell nutze ich einfach nur den falschen Schalter für findstr?! Ich hoffe, mir kann jemand bei der Lösung dieses Problems helfen!
Thoper
ich habe folgendes Problem mit einer Batch, die mir zwei Zeilen in einer Textdatei ersetzen soll. Zunächst habe ich dieses funktionierende Script genutzt um die beiden Zeilen zu ersetzen:
@echo off
setlocal disableDelayedExpansion
set "datei=C:\Users\%username%\Desktop\test.js"
set "tmpdatei=%temp%\tmp.txt"
if exist C:\Users\%username%\Desktop\test.js (
GOTO :beginnersetzen ) else (
goto :eof)
:beginnersetzen
>"%tmpdatei%" (
for /f "tokens=1* delims=:" %%A in ('findstr /n "^" "%datei%"') do (
if %%A==1 (
echo user_pref("abc.app.filename", "file:///D:/%COMPUTERNAME%.txt"^);
) else if %%A==2 (
echo user_pref("abc.app.URL", "file:///D:/%COMPUTERNAME%.txt"^);
) else echo(%%B
)
)
move /y "%tmpdatei%" "%datei%"
Nun ist es aber so, dass der zu ersetzende Text nicht unbedingt an Stelle X oder Y (hier Zeile 1 und 2) auftaucht, d.h. dass ich nach einer bestimmten Zeichenkette ( z.B. abc.app.filename und abc.app.URL ) suchen müsste um dann die komplette Zeile zu ersetzen. Mit folgendem Versuch die for-Schleife zu ändern bin ich bislang gescheitert:
>"%tmpdatei%" (
for /f "tokens=1* delims=:" %%A in ('findstr /c "^" "%datei%"') do (
if %%A==abc.app.filename (
echo user_pref("abc.app.filename", "file:///D:/%COMPUTERNAME%.txt"^);
) else if %%A==abc.app.URL (
echo user_pref("abc.app.URL", "file:///D:/%COMPUTERNAME%.txt"^);
) else echo(%%A
)
)
Das funktioniert solange in der Zeile auch nur die genaue Zeichenkette
abc.app.filename
steht, aber die Zeile sieht in etwas so aus:
user_pref("abc.app.filename", "file:///D:/test.txt");
Und dann funktioniert es mit dem Ersetzen leider nicht und die geänderte Zeile sieht im Ergebnis so aus:
user_pref("abc.app.filename", "file
Die Zeile wird am Ende also einfach beschnitten. Leider sind meine Kenntnisse rudimentär und ich komme an dieser Stelle nicht mehr weiter. Eventuell nutze ich einfach nur den falschen Schalter für findstr?! Ich hoffe, mir kann jemand bei der Lösung dieses Problems helfen!
Thoper
Please also mark the comments that contributed to the solution of the article
Content-Key: 201534
Url: https://administrator.de/contentid/201534
Printed on: May 8, 2024 at 05:05 o'clock
4 Comments
Latest comment
Hallo Thoper und willkommen im Forum!
Wenn es bei den (nur) 2 Ersetzungen bleibt, ungetestet etwa so:
Kurze Erklärung: Da die mit "
steht in %%A eben die Zeilennummer und der Zeilentext selbst ist in %%B zu finden. Durch die Angabe von "
Grüße
bastla
Wenn es bei den (nur) 2 Ersetzungen bleibt, ungetestet etwa so:
@echo off & setlocal disableDelayedExpansion
set "datei=C:\Users\%username%\Desktop\test.js"
set "tmpdatei=%temp%\tmp.txt"
if not exist "C:\Users\%username%\Desktop\test.js" goto :eof
>"%tmpdatei%" (
for /f "tokens=1* delims=:" %%A in ('findstr /n "^" "%datei%"') do (
echo "%%B"|findstr "abc\.app\.filename" >nul && (
echo user_pref("abc.app.filename", "file:///D:/%COMPUTERNAME%.txt"^);
) || (
echo "%%B"|findstr "abc\.app\.URL" >nul && (
echo user_pref("abc.app.URL", "file:///D:/%COMPUTERNAME%.txt"^);
) || (
echo(%%B
)
)
)
)
move "%tmpdatei%" "%datei%">nul
findstr /n
" erzeugte Zeile ja so aussieht:Zeilennummer:Zeilentext
tokens=1* delims=:
" wurde festgelegt, dass das Trennzeichen ":" nur einmal berücksichtigt werden soll, sodass der Zeilentext nicht "zerrissen" wird.Grüße
bastla
Hallo Thoper!
Lass in den Zeilen 9 und 12 die Anführungszeichen um
Grüße
bastla
P.S.: Die Zeile 5 wäre so:
auch noch sinnvoller (weil änderungsfreundlicher).
Lass in den Zeilen 9 und 12 die Anführungszeichen um
%%B
herum weg ...echo "%%B"|findstr "abc\.app\.filename" >nul && (
echo user_pref("abc.app.filename", "file:///D:/%COMPUTERNAME%.txt"^);
) ||
Grüße
bastla
P.S.: Die Zeile 5 wäre so:
if not exist "%datei%" goto :eof