Mittels Batch Txt-Datei ein Zeichen ändern (altern. Zeile mit Anf)
Moin,
ich habe mich hier seit ein paar Tagen duch einige threads gearbeitet, aber immer kam ich an eine Stelle, die mein Verständnis überstieg.
Folgendes Problem:
Ich habe eine cfg-Datei, in der ich jede Nacht eine Ziffer ändern möchte.
Mein Plan ist, unter Windows per Aufgabenplanung eine Batch-Datei auszuführen.
Der Wert steht mitten in einer Zeile, in der auch Leer- und Anführungszeichen stehen, also sowas wie
texttext("text.text", 5);
Um die 5 geht es mir, die möchte ich täglich ändern. Alles andere soll so bleiben wie es ist (z.B. texttext("text.text", 6); )
Die Datei hat natürlich viele andere Zeilen, die gesuchte hat aber einen klar definierten Inhalt. Die Ziffer ist immer einstellig (Wochentag)
Aus den verschiedenen threads habe ich entnommen, dass normalerweise die Ursprungsdatei zeilenweise in eine neue Datei kopiert wird und die gewünschte Zeile dann durch eine neu erstellte ersetzt wird.
Soviel habe ich mir zusammengesucht, es funktioniert natürlich NICHT.
mit findstr %SuchStr% %QDatei% wird mir immerhin die gesuchte Zeile ausgegeben
Leider schaffe ich es nicht, diese Zeile in eine Variable zu bekommen, die ich dann durch eine umgebaute Zeile ersetzen kann.
Ich würde ja gerne so an die Sache herangehen, dass ich die Zeile herauspicke und das Zeichen an der x. Stelle durch das neue Zeichen ersetze, aber diese Möglichkeit scheint es in der Batch wohl nicht zu geben(?).
Könnt Ihr mir auf den richtigen Weg helfen?
Gruß
Tali
ich habe mich hier seit ein paar Tagen duch einige threads gearbeitet, aber immer kam ich an eine Stelle, die mein Verständnis überstieg.
Folgendes Problem:
Ich habe eine cfg-Datei, in der ich jede Nacht eine Ziffer ändern möchte.
Mein Plan ist, unter Windows per Aufgabenplanung eine Batch-Datei auszuführen.
Der Wert steht mitten in einer Zeile, in der auch Leer- und Anführungszeichen stehen, also sowas wie
texttext("text.text", 5);
Um die 5 geht es mir, die möchte ich täglich ändern. Alles andere soll so bleiben wie es ist (z.B. texttext("text.text", 6); )
Die Datei hat natürlich viele andere Zeilen, die gesuchte hat aber einen klar definierten Inhalt. Die Ziffer ist immer einstellig (Wochentag)
Aus den verschiedenen threads habe ich entnommen, dass normalerweise die Ursprungsdatei zeilenweise in eine neue Datei kopiert wird und die gewünschte Zeile dann durch eine neu erstellte ersetzt wird.
SET QDatei="c:\test 1.txt"
SET SuchStr=texttext
SET ZDatei="c:\test2.txt"
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('SuchStr . %QDatei%') do (
set line=%%i
set line=!line:"%SuchStr%"="%Ersatz%"!
echo !line! >> %ZDatei%)
Soviel habe ich mir zusammengesucht, es funktioniert natürlich NICHT.
mit findstr %SuchStr% %QDatei% wird mir immerhin die gesuchte Zeile ausgegeben
Leider schaffe ich es nicht, diese Zeile in eine Variable zu bekommen, die ich dann durch eine umgebaute Zeile ersetzen kann.
Ich würde ja gerne so an die Sache herangehen, dass ich die Zeile herauspicke und das Zeichen an der x. Stelle durch das neue Zeichen ersetze, aber diese Möglichkeit scheint es in der Batch wohl nicht zu geben(?).
Könnt Ihr mir auf den richtigen Weg helfen?
Gruß
Tali
Please also mark the comments that contributed to the solution of the article
Content-Key: 363806
Url: https://administrator.de/contentid/363806
Printed on: April 26, 2024 at 01:04 o'clock
8 Comments
Latest comment
Mittels Batch Txt-Datei ein Zeichen ändern
... bedeutet zumindest bei Batch, die gesamte Datei neu zu schreiben.(altern. Zeile mit Anf)
... klingt schon mal nach einem Plan.Kannst du mal mit der realen Zeile aufwarten, in Code Tags eingeschlossen (</> Button im Editorfenster) und inclusive Zeileneinrückung, falls vorhanden?
Steffen
Powershell
Gruß Snap
$neuerWert = 6
(gc 'C:\test1.txt') -replace '(?<="calendar\.week\.start",\s*)\d+',$neuerWert | sc 'C:\test1.txt'
Sorry, Powershell sagt mir nichts.
Dann wirds Zeit .Kann ich das in einer startbaren Datei speichern und dann aufrufen?
Sischer dat ...https://www.windowspro.de/andreas-kroschel/powershell-scripts-ausfuehren
Kannst du sogar direkt in deine Batch einbauen:
powershell.exe -Executionpolicy ByPass -Command "$neuerWert = 6;(gc 'C:\test1.txt') -replace '(?<=\"calendar\.week\.start\",\s*)\d+',$neuerWert | sc 'C:\test1.txt'"
Teste:
Steffen
@echo off &setlocal DisableDelayedExpansion
set "src=test 1.txt"
set "dst=test2.txt"
set "pattern=\"calendar\.week\.start\""
set "found="
for /f "delims=:" %%i in ('findstr /n "%pattern%" "%src%"') do set "found=%%i"
if not defined found exit /b
setlocal EnableDelayedExpansion
<"!src!" >"!dst!" (
for /f %%i in ('type "!src!"^|find /c /v ""') do for /l %%j in (1 1 %%i) do (
set "line=" & set /p "line="
if %%j==%found% (
for /f "tokens=1-3 delims=,)" %%k in ("!line!") do (
set /a "n=%%l + 1"
echo(%%k, !n!^)%%m
)
) else echo(!line!
)
)
Steffen