nobbi.the.great
Goto Top

Batch - Inhalt einer .txt verändern - Bitte um Steinigung

Ich dachte es wäre schnell gemacht, aber ich lese und lese, schnall es aber einfach nicht.

Hallo Administratoren.

Ich habe folgende Themen durchforstet ...
Thema 1
Thema 2
Thema 3
Thema 4
Thema 5

... komme aber nicht auf die Lösung.

Ich habe eine .txt Datei (bzw. ini) mit mehreren Zeilen Text.

In dem Text gibt es ein Schlüsselwort das einmalig vorhanden ist. Dieses will ich ändern (in diesem Falle das aktuelle Datum anhängen) und die Datei wieder speichern.
Aktives Ändern wird nicht funktionieren, also temporär speichern und dann verschieben bzw umbenennen (dies traue ich mir zu).

Ich habe bisher die Zeile mit dem Schlüsselwort ausgelesen, geändert und abgespeichert. Aber wie schaffe bekomme ich den anderen unveränderten Text in die ping_ausgabe.txt?
Ich will also nur eine kleine Änderung (eine Zeile bzw würde auch die gesuchte Passage (asus) reichen) vornehmen + den restlichen Inhalt der Datei (restlichen Zeilen) einfach übernehmen.

@echo off & setlocal enableDelayedExpansion

:: setze Zeit
set date=%date%
set yaer=%date:~8,4%
FOR /F "tokens=1,2,3 delims=/. " %%a in ('date /t') do set CDATE=%%b%%a  

:: suche Schlüsselwort
for /F "delims=" %%i in ('findstr asus C:\123456789\ping.txt') do set "Line=%%i  
::speichere Änderung
echo %Line%_%yaer%%CDATE% >>C:\123456789\ping_ausgabe.txt
 
::verzweifle ...

::temporäre Datei in Finale Datei umbenennen und an Zielort kopieren
move /y C:\123456789\ping_ausgabe.txt c:\Finaler_Ort\ping.ini

In den Themen die ich verlinkt habe, scheint die Antwort zu stehen, ich kann sie aber einfach nicht sehen oder verstehen.

Bitte um Hilfe ...

Content-ID: 175792

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

Ausgedruckt am: 08.11.2024 um 00:11 Uhr

Skyemugen
Skyemugen 04.11.2011, aktualisiert am 18.10.2012 um 18:49:00 Uhr
Goto Top
Aloha,

nun, eventuell gefällt dir auch dieses Thema face-wink in dem es auch nur darum geht ein bestimmtes Wort gegen ein anderes zu ersetzen face-wink

set "Von=Schluesselwort"set "Nach=%Von%_%date%"
oder statt Von eben Alt und statt Nach eben Neu der Rest ist c&p ...

greetz André
miniversum
miniversum 04.11.2011 um 16:05:02 Uhr
Goto Top
Jetzt ohne die verlinkten Beiträge gelesen zu haben funktioniert das ganze prinzipiell so:

1. Zeilennummer der zu ändernden Zeile herausfinden. Das geht z.B. über den Parameter /n des findstr Befehls.
2. Alles vor dieser Zeile in eine temponäre Datei schreiben (wieder Findstr mit parameter /N /R .* (so ungefär)
3. Die zu ändernde zeile ändern und an die temponäre Datei anhängen
4. Den Rest an die temponäre datei anhängen. Z.B. über der Befehl more +x
Nobbi.the.Great
Nobbi.the.Great 05.11.2011 um 22:10:16 Uhr
Goto Top
@Skyemugen

Ich könnt dich knutschen.

Ich hab jetzt zwar nicht analysiert, was an dem Code anders ist als bei meinen Themen, aber dieses mal hab ich es teilsweise verstanden.

Ich muss mich dem Thema echt mal mehr annehmen.

Danke für den Thread-Link

@miniversum
die Theorie hab ich drauf, an der Umsetzung und den Codekenntnissen hapert es mir letztlich.

Trotzdem danke


Meinen kompletten Code poste ich demnächst dann hier.
Nobbi.the.Great
Nobbi.the.Great 07.11.2011 um 13:50:15 Uhr
Goto Top
Hier der versprochene Code.


@echo on & setlocal
mode 133,88

set date=%date%
set yaer=%date:~8,4%
FOR /F "tokens=1,2,3 delims=/. " %%a in ('date /t') do set CDATE=%%b%%a  

set "Ausgangsdatei=.\Text.txt"  
set "Von=Suchtext"  
set "Nach=Neuer-Text+Datum_%yaer%%CDATE%.txt"  
set "t=.\Text_NEU.txt"  

if exist "%t%" del "%t%"  
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ausgangsdatei%"') do set "Line=%%j" & call :ProcessLine  
goto :eof

:ProcessLine
setlocal enabledelayedexpansion
(if defined Line (echo !Line:%Von%=%Nach%!) else (echo())>>"%t%"  
endlocal

goto :eof


Funktioniert so tadellos.

Danke nochmal für die Hilfe

P.S. Wenn ich die goto :eof ändere z.B. in goto :zwischenschritt um noch etwas kleines einzufügen, stürzt die .bat sang und klanglos ab.
Kann man in einem Satz sagen wieso das so ist? Ich verstehe eof als "mach Schluss" wenn Fall nicht zutreffend.
Skyemugen
Skyemugen 07.11.2011 um 15:07:38 Uhr
Goto Top
Aloha,

erst einmal: set date=%date% == sinnfrei? face-wink
und dann set yaer=%date:~8,4% == year face-wink und die Frage 8 Stellen überspringen (von 10) und 4 Stellen anzeigen? ... ergibt 2 vorhandene Stellen dennoch nur ... == set year=%date:~-2%
Dann
Wenn ich die goto :eof ändere
beide? Au weia, das zweite goto :eof sorgt dafür, dass es zurück zur Hauptablauf (Schleife) geht ... was du aus dem ersten goto :eof machst, ist dir überlassen, solange es zu einem Ziel nach Zeile 22 führt.

greetz André
Nobbi.the.Great
Nobbi.the.Great 10.11.2011 um 16:15:24 Uhr
Goto Top
Zitat von @Skyemugen:
erst einmal: set date=%date% == sinnfrei? face-wink
hast Recht .. ein Überbleibsel ... irgendwas wollt ich daraus noch machen
und dann set yaer=%date:~8,4% == year face-wink und die Frage 8 Stellen überspringen (von 10) und 4 Stellen anzeigen? ...
ergibt 2 vorhandene Stellen dennoch nur ... == set year=%date:~-2%
Da war ich wohl etwas großzügig ... hinten raus face-wink 8,2 reicht natürlich auch
> Wenn ich die goto :eof ändere
beide? Au weia, das zweite goto :eof sorgt dafür, dass es zurück zur Hauptablauf (Schleife) geht ... was du aus dem
ersten goto :eof machst, ist dir überlassen, solange es zu einem Ziel nach Zeile 22 führt.
Fehler erkannt und gebannt.

Großen Dank nochmal!