Aus TXT bestimmte zeilen ändern
Hi
Hab ne frage und zwar habe ich eine txt datei die so aussieht.
Time
Time
mediaserver
mediaserver
Time
Victoria
merlin
merlin
admin
Ich hab jetzt zwei möglichkeiten mein probelm zu lösen
1 ich baue in mein programm eine bedingugn ein die heißt
wenn in zeile 1 " time" steht muss als variable %null% ausgegeben werden.
oder ich tu in das programm einen befehl zur änderung der txt rein der mir automatisch das wort von
" time" >> "%null%" ändert
vor dem time steht ein leerzeichen.
ich glaube variante 2 is besser für mich da ich eh schon eine txt auswertung davor am laufen habe.
hoffe ihr versteht mich
Hab ne frage und zwar habe ich eine txt datei die so aussieht.
Time
Time
mediaserver
mediaserver
Time
Victoria
merlin
merlin
admin
Ich hab jetzt zwei möglichkeiten mein probelm zu lösen
1 ich baue in mein programm eine bedingugn ein die heißt
wenn in zeile 1 " time" steht muss als variable %null% ausgegeben werden.
oder ich tu in das programm einen befehl zur änderung der txt rein der mir automatisch das wort von
" time" >> "%null%" ändert
vor dem time steht ein leerzeichen.
ich glaube variante 2 is besser für mich da ich eh schon eine txt auswertung davor am laufen habe.
hoffe ihr versteht mich
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 150867
Url: https://administrator.de/contentid/150867
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo djhanf!
Bis Du Dich endgültig entschieden hast (und unter der Annahme, dass Du mit " time" die im Beispiel oben angeführte Zeile "Time" - aber eben mit führendem Leerzeichen - meinst), ein Vorschlag für Variante 1:
Soll " time" aber tatsächlich nur in Kleinbuchstaben erkannt werden, das "
einsetzen ...
[Edit] Da lt obigem Muster in den Zeilen keine Anführungszeichen vorkommen, auf die Schreibweise des Vergleiches mit Anführungszeichen geändert [/Edit]
Grüße
bastla
Bis Du Dich endgültig entschieden hast (und unter der Annahme, dass Du mit " time" die im Beispiel oben angeführte Zeile "Time" - aber eben mit führendem Leerzeichen - meinst), ein Vorschlag für Variante 1:
@echo off & setlocal
::
::
set /p Zeile=<1.txt
if /i "%Zeile%"==" time" echo %null%
if
" ohne "/i
" verwenden, und falls es auch nach dem Wort noch (ev sogar eine unbekannte Anzahl von) Leerzeichen geben könnte, als Zeile 3echo "%Zeile%"|findstr /b /c:"\" time">nul && echo %null%
[Edit] Da lt obigem Muster in den Zeilen keine Anführungszeichen vorkommen, auf die Schreibweise des Vergleiches mit Anführungszeichen geändert [/Edit]
Grüße
bastla
Hallo djhanf!
Ich sag's auch nur ungern - aber Du wolltest %null% ausgeben, und mein Vorschlag bezog sich auf Deine Variante 1 ...
Wenn's also nun wirklich Version 2 sein soll, dann eben:
[Edit] Zeile 9 an Dein "Edit" angepasst - und um Groß-/Kleinschreibung kannst Du Dich ja selbst kümmern bzw brauchst es in dieser Fassung nicht [/Edit]
[Edit2] Vorgangsweise noch etwas abgewandelt [/Edit2]
Sinnvoller wäre allerdings, den ganzen Zauber zu überspringen, wenn keine Änderung erforderlich ist, also etwa:
Grüße
bastla
Ich sag's auch nur ungern - aber Du wolltest %null% ausgeben, und mein Vorschlag bezog sich auf Deine Variante 1 ...
Wenn's also nun wirklich Version 2 sein soll, dann eben:
@echo off & setlocal
::
::
set "Datei=pw.txt"
set "DateiTemp=%temp%\Eine.tmp"
set /p Zeile=<"%Datei%"
copy "%Datei%" "%DateiTemp%">nul
if /i "%Zeile%"==" time" (
echo\%null%
more +1 "%DateiTemp%"
)>"%Datei%"
del "%DateiTemp%"
[Edit2] Vorgangsweise noch etwas abgewandelt [/Edit2]
Sinnvoller wäre allerdings, den ganzen Zauber zu überspringen, wenn keine Änderung erforderlich ist, also etwa:
@echo off & setlocal
::
::
set "Datei=pw.txt"
set /p Zeile=<"%Datei%"
if /i "%Zeile%" neq " time" goto :Weiter
set "DateiTemp=%temp%\Eine.tmp"
copy "%Datei%" "%DateiTemp%">nul
echo\%null%>"%Datei%"
more +1 "%DateiTemp%">>"%Datei%"
del "%DateiTemp%"
:Weiter
::
::
bastla
Hallo djhanf!
So geht's natürlich auch - aber nur, wenn Du auch beide Befehle in der Klammer ausführst, also:
Außerdem sollte Deine Variable %null% einen Inhalt haben (falls sie leer ist, kann mit "
Grüße
bastla
P.S.: Wir hätten da eine passende für gepostete Batches ...
So geht's natürlich auch - aber nur, wenn Du auch beide Befehle in der Klammer ausführst, also:
if /i "%Zeile%"==" Time" (echo %null% & more +1 "Eine.tmp")>"%Datei%"
echo\%null%
" eine Leerzeile erzeugt werden) ...Grüße
bastla
P.S.: Wir hätten da eine passende für gepostete Batches ...
Hallo djhanf!
Dann musst Du in einem Batch dafür aber
schreiben - ansonsten sollte das aber mit der vorhin geposteten Zeile schon funktionieren (tut's zumindest bei mir, wenn in der ersten Zeile tatsächlich " Time" - mit einem Leerzeichen davor und nix dahinter - steht) ...
Grüße
bastla
P.S.: Auch mit dem Batch weiter oben geht's ...
Dann musst Du in einem Batch dafür aber
echo %%null%%
Grüße
bastla
P.S.: Auch mit dem Batch weiter oben geht's ...
Hallo djhanf!
Wenn ich Dich jetzt (endlich) richtig verstehe, soll also aus
dann
werden? In diesem Fall dann eher so:
wobei sich die Zeilen 11 - 15 auch kompakter schreiben lassen:
Grüße
bastla
Wenn ich Dich jetzt (endlich) richtig verstehe, soll also aus
Time
Time
mediaserver
mediaserver
Time
Victoria
merlin
merlin
admin
%null%
Time
mediaserver
mediaserver
%null%
Victoria
merlin
merlin
admin
@echo off & setlocal
set "Datei=pw.txt"
set "DateiTemp=%temp%\Eine.tmp"
move "%Datei%" "%DateiTemp%">nul
for /f "usebackq delims=" %%i in ("%DateiTemp%") do set "Zeile=%%i" & call :ProcessLine
del "%DateiTemp%"
goto :eof
:ProcessLine
if /i "%Zeile%"==" Time" (
>>"%Datei%" echo %%null%%
) else (
>>"%Datei%" echo %Zeile%
)
goto :eof
(if /i "%Zeile%"==" Time" (echo %%null%%) else (echo %Zeile%))>>"%Datei%"
bastla