Bestimmte Zeile auslesen um weitere funktionen auszuführen
Hey.
habe mich nun doch nach laengerer zeit, in der ich nur mitgelesen habe, bei euch registriert.
und zwar gibt es ein kleines problem zu dem ich keine direkte hilfe gefunden habe.
Ich habe ein txt-dokument, welches verschiedene IP-Adressen mit nachfolgenden stats beinhaltet.
ich moechte, dass die batch das txt-dokument zeilenweise ausliest und in der zeile mit dem wort "DIR" am zeilenanfang kontrolliert, ob ein unterordner angegeben ist ("Dir: /private/" o.ä.) oder nicht ("Dir: /")
wenn kein unterverzeichnis angegeben ist, sollen die dazugehoerigen zeilen in eine neue txt geschrieben werden und aus der alten geloescht werden.
Im Detail:
der inhalt von "vorlage.txt" sieht wie folgt aus (nur noch weitaus umfangreicher) :
aus der "vorlage.txt" sollen nun die zeilen "DIR:/" auf einen moeglichen pfad kontrolliert werden.
wenn kein pfad angegeben ist (DIR:/), sollen die dazugehoerigen stats in die "ohne.txt" übertragen werden und aus der "vorlage.txt" geloescht werden.
am ende soll dann "vorlage.txt" in "mit.txt" umbenannt werden (was ja kein problem ist).
die "mit.txt" soll dann nachher so aussehen:
der rest soll in der "ohne.txt" gelistet sein.
vll ist es auch einfacher, es andersrum zu machen.
sodass die stats der IP, mit pfad (Dir: /private/) in ein neues txt-dokument geschrieben werden.
leider habe ich fuer diese aufgabe keinen ansatz, denn mit dem findstr befehl wuesste ich nicht, wie er nur die zeile "DIR:/" ueberpruefen soll.
und weiterhin, wie die dazugehoerigen zeilen mit verschoben werden sollen.
schonmal danke fuer eure hilfe!
habe mich nun doch nach laengerer zeit, in der ich nur mitgelesen habe, bei euch registriert.
und zwar gibt es ein kleines problem zu dem ich keine direkte hilfe gefunden habe.
Ich habe ein txt-dokument, welches verschiedene IP-Adressen mit nachfolgenden stats beinhaltet.
ich moechte, dass die batch das txt-dokument zeilenweise ausliest und in der zeile mit dem wort "DIR" am zeilenanfang kontrolliert, ob ein unterordner angegeben ist ("Dir: /private/" o.ä.) oder nicht ("Dir: /")
wenn kein unterverzeichnis angegeben ist, sollen die dazugehoerigen zeilen in eine neue txt geschrieben werden und aus der alten geloescht werden.
Im Detail:
der inhalt von "vorlage.txt" sieht wie folgt aus (nur noch weitaus umfangreicher) :
192.168.0.1
---------------
Dir: /
space free: 2658,50 mb
exec: no
logins: 5
192.168.0.2
---------------
Dir: /
space free: 3450,50 mb
exec: yes
logins: 19
192.168.0.3
---------------
Dir: /private/
space free: 3657,00 mb
exec: yes
logins: 10
192.168.0.4
---------------
Dir: /
space free: 6325,00 mb
exec: no
logins: 13
192.168.0.5
---------------
Dir: /private/test/
space free: 247,00 mb
exec: yes
logins: 15
aus der "vorlage.txt" sollen nun die zeilen "DIR:/" auf einen moeglichen pfad kontrolliert werden.
wenn kein pfad angegeben ist (DIR:/), sollen die dazugehoerigen stats in die "ohne.txt" übertragen werden und aus der "vorlage.txt" geloescht werden.
am ende soll dann "vorlage.txt" in "mit.txt" umbenannt werden (was ja kein problem ist).
die "mit.txt" soll dann nachher so aussehen:
192.168.0.3
---------------
Dir: /private/
space free: 3657,00 mb
exec: yes
logins: 10
192.168.0.5
---------------
Dir: /private/test/
space free: 247,00 mb
exec: yes
logins: 15
der rest soll in der "ohne.txt" gelistet sein.
vll ist es auch einfacher, es andersrum zu machen.
sodass die stats der IP, mit pfad (Dir: /private/) in ein neues txt-dokument geschrieben werden.
leider habe ich fuer diese aufgabe keinen ansatz, denn mit dem findstr befehl wuesste ich nicht, wie er nur die zeile "DIR:/" ueberpruefen soll.
und weiterhin, wie die dazugehoerigen zeilen mit verschoben werden sollen.
schonmal danke fuer eure hilfe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159632
Url: https://administrator.de/forum/bestimmte-zeile-auslesen-um-weitere-funktionen-auszufuehren-159632.html
Ausgedruckt am: 05.05.2025 um 09:05 Uhr
8 Kommentare
Neuester Kommentar
Hallo ersatzteil und willkommen im Forum!
Das könnte etwa so gehen:
Grüße
bastla
Das könnte etwa so gehen:
@echo off & setlocal
set "Vor=D:\vorlage.txt"
set "Mit=D:\mit.txt"
set "Ohne=D:\ohne.txt"
set "Kenn=Dir: /"
set "T=%temp%\temp.txt"
del "%Mit%" 2>nul
del "%Ohne%" 2>nul
del "%T%"
set "Ziel="
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Vor%"') do set "Zeile=%%j" & call :ProcessLine
>>"%Ziel%" type "%T%"
goto :eof
:ProcessLine
if "%Zeile%" neq "" (
echo %Zeile%|findstr /b "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*">nul && (if exist %T% >>"%Ziel%" type "%T%" & del "%T%")
echo %Zeile%|findstr /b /c:"%Kenn%">nul && (if "%Zeile%"=="%Kenn%" (set "Ziel=%Ohne%") else (set "Ziel=%Mit%"))
)
>>"%T%" echo\%Zeile%
goto :eof
bastla
Hallo ersatzteil!
Wo sich Deine Ausgangsdatei "vorlage.txt" befindet, und wohin Du die Ergebnisdateien schreiben willst (bzw kannst), musst Du natürlich selbst wissen ...
Damit Du trotzdem zumindest die Fehlermeldungen lesen kannst, füge unmitelbar vor Zeile 15 eine neue Zeile
ein.
Wenn Du noch mehr vom Ablauf sehen willst, ändere auch noch in Zeile 1 "
Grüße
bastla
Wo sich Deine Ausgangsdatei "vorlage.txt" befindet, und wohin Du die Ergebnisdateien schreiben willst (bzw kannst), musst Du natürlich selbst wissen ...
jedoch kann ich sie auch nicht mit dem befehl "wait" offenhalten, sodass ich sehen koennte, was darin steht.
Zum Testen von Batchdateien empfiehlt es sich, diese aus einer CMD-Shell zu starten ...Damit Du trotzdem zumindest die Fehlermeldungen lesen kannst, füge unmitelbar vor Zeile 15 eine neue Zeile
pause
Wenn Du noch mehr vom Ablauf sehen willst, ändere auch noch in Zeile 1 "
echo off
" auf "echo on
" ...Grüße
bastla
Hallo ersatzteil!
Ja, ich habe getestet und folgende Dateiinhalte:
"mit.txt"
"ohne.txt"
und nein, es ist nicht egal, wo sich die "vorlage.txt" befindet, da sie ja schließlich vom Batch gefunden werden muss ...
Als Alternative eine "Drag & Drop"-Variante:
Wenn Du die "vorlage.txt" auf die Batchdatei ziehst, werden die Ergebnisdateien im selben Ordner wie die Ausgangsdatei erzeugt (soferne Du dort Schreibrechte hast)..
Grüße
bastla
Ja, ich habe getestet und folgende Dateiinhalte:
"mit.txt"
192.168.0.3
---------------
Dir: /private/
space free: 3657,00 mb
exec: yes
logins: 10
192.168.0.5
---------------
Dir: /private/test/
space free: 247,00 mb
exec: yes
logins: 15
192.168.0.1
---------------
Dir: /
space free: 2658,50 mb
exec: no
logins: 5
192.168.0.2
---------------
Dir: /
space free: 3450,50 mb
exec: yes
logins: 19
192.168.0.4
---------------
Dir: /
space free: 6325,00 mb
exec: no
logins: 13
Als Alternative eine "Drag & Drop"-Variante:
@echo off & setlocal
set "Vor=%~1"
set "Mit=%~dp1mit.txt"
set "Ohne=%~dp1ohne.txt"
set "Kenn=Dir: /"
set "T=%temp%\temp.txt"
del "%Mit%" 2>nul
del "%Ohne%" 2>nul
del "%T%"
set "Ziel="
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Vor%"') do set "Zeile=%%j" & call :ProcessLine
>>"%Ziel%" type "%T%"
pause
goto :eof
:ProcessLine
if "%Zeile%" neq "" (
echo %Zeile%|findstr /b "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*">nul && (if exist %T% >>"%Ziel%" type "%T%" & del "%T%")
echo %Zeile%|findstr /b /c:"%Kenn%">nul && (if "%Zeile%"=="%Kenn%" (set "Ziel=%Ohne%") else (set "Ziel=%Mit%"))
)
>>"%T%" echo\%Zeile%
goto :eof
Grüße
bastla