In einer txt Datei verschiedene Zeilen löschen
Mein Script sieht so aus:
@echo off
set katalog="c:\Speicher_1.txt"
tree "d:\recordings" /f /a > %katalog%
Damit erstelle ich mir eine Text-datei über meine aufgenommenen Filme.
Diese Datei ist mein einziger Erfolg den ich bis jetzt verzeichnen konnte.
Das Ergebnis möchte ich weiterbearbeiten, wenn möglich mit einer Erweiterung meines Scripts.
Hier ein Auszug:
D:\RECORDINGS
+---AAA
| +---Alien
| | +---Alien_vs._Predator_(Alien_vs._Predator)
| | | \---2007-01-13.12.18.50.99.rec
| | | 001.vdr*
| | | 002.vdr*
| | | 003.vdr*
| | | index.vdr*
| | | info.vdr*
| | | info.vdr.save*
| | | resume.vdr*
| | | *
| | +---Alien_3
| | | \---2007-01-05.21.43.50.99.rec
| | | 001.vdr*
| | | 002.vdr*
| | | index.vdr*
| | | info.vdr*
| | | info.vdr.save*
| | | resume.vdr*
| | | *
| | \---Alien_-_Die_Wiedergeburt
| | \---2007-01-17.07.13.50.99.rec
| | 001.vdr*
| | 002.vdr*
| | 003.vdr*
| | index.vdr*
| | info.vdr*
| | info.vdr.save*
| | resume.vdr*
Die Liste soll so weiter bearbeitet werden das als Ergebnis es so Aussieht:
D:\RECORDINGS
+---AAA
| +---Alien
| | +---Alien_vs._Predator_(Alien_vs._Predator)
| | | \---2007-01-13.12.18
| | +---Alien_3
| | | \---2007-01-05.21.43
| | \---Alien_-_Die_Wiedergeburt
| | \---2007-01-17.07.13
Ihr seht das einige Zeilen komplett (markiert mit *)gelöscht werden sollen und eine Endung ebenfalls. (.50.99.rec)
Ich hoffe das das umsetzbar ist, denn meine Kenntnisse im Scriptschrieben sind gleich Null.
Das kleine script am Anfang habe ich mir mühsam er googelt.
Mit freundlichen Grüßen Jamesb10
@echo off
set katalog="c:\Speicher_1.txt"
tree "d:\recordings" /f /a > %katalog%
Damit erstelle ich mir eine Text-datei über meine aufgenommenen Filme.
Diese Datei ist mein einziger Erfolg den ich bis jetzt verzeichnen konnte.
Das Ergebnis möchte ich weiterbearbeiten, wenn möglich mit einer Erweiterung meines Scripts.
Hier ein Auszug:
D:\RECORDINGS
+---AAA
| +---Alien
| | +---Alien_vs._Predator_(Alien_vs._Predator)
| | | \---2007-01-13.12.18.50.99.rec
| | | 001.vdr*
| | | 002.vdr*
| | | 003.vdr*
| | | index.vdr*
| | | info.vdr*
| | | info.vdr.save*
| | | resume.vdr*
| | | *
| | +---Alien_3
| | | \---2007-01-05.21.43.50.99.rec
| | | 001.vdr*
| | | 002.vdr*
| | | index.vdr*
| | | info.vdr*
| | | info.vdr.save*
| | | resume.vdr*
| | | *
| | \---Alien_-_Die_Wiedergeburt
| | \---2007-01-17.07.13.50.99.rec
| | 001.vdr*
| | 002.vdr*
| | 003.vdr*
| | index.vdr*
| | info.vdr*
| | info.vdr.save*
| | resume.vdr*
Die Liste soll so weiter bearbeitet werden das als Ergebnis es so Aussieht:
D:\RECORDINGS
+---AAA
| +---Alien
| | +---Alien_vs._Predator_(Alien_vs._Predator)
| | | \---2007-01-13.12.18
| | +---Alien_3
| | | \---2007-01-05.21.43
| | \---Alien_-_Die_Wiedergeburt
| | \---2007-01-17.07.13
Ihr seht das einige Zeilen komplett (markiert mit *)gelöscht werden sollen und eine Endung ebenfalls. (.50.99.rec)
Ich hoffe das das umsetzbar ist, denn meine Kenntnisse im Scriptschrieben sind gleich Null.
Das kleine script am Anfang habe ich mir mühsam er googelt.
Mit freundlichen Grüßen Jamesb10
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 07.03.2010 um 14:14:51 Uhr
#rgc:= 657
und seitdem kann ich ihn nicht mehr Öffnen/löschen/Umbennen.
#rgc:= 658Content-ID: 137545
Url: https://administrator.de/forum/in-einer-txt-datei-verschiedene-zeilen-loeschen-137545.html
Ausgedruckt am: 18.05.2025 um 11:05 Uhr
28 Kommentare
Neuester Kommentar
Hallo Jamesb10 und willkommen im Forum!
Das Ausfiltern von Zeilen lässt sich mit "
[Edit] Tippfehler bei "KT" korrigiert [/Edit]
Da sich schon hinsichtlich der "|" für Batch etwas mühsam verarbeitbare Sonderzeichen in der Datei befinden, würde ich das Entfernen von ".50.99.rec" mit einem temporären VB-Script realisieren - unter der Voraussetzung, dass der String immer ".50.99.rec" lautet, (ungetestet) als Fortsetzung etwa so:
Das Ergebnis findest Du dann in "C:\Katalog_fertig.txt".
Grüße
bastla
Das Ausfiltern von Zeilen lässt sich mit "
findstr /v
" erreichen - daher zB als nächste Zeilen:set "KT=%temp%\kat.txt"
findstr /v "\.vdr" "%katalog%"|findstr /e /v "| | |">%KT%
Da sich schon hinsichtlich der "|" für Batch etwas mühsam verarbeitbare Sonderzeichen in der Datei befinden, würde ich das Entfernen von ".50.99.rec" mit einem temporären VB-Script realisieren - unter der Voraussetzung, dass der String immer ".50.99.rec" lautet, (ungetestet) als Fortsetzung etwa so:
set "KF=C:\Katalog_fertig.txt"
set "Entf=".50.99.rec"
set E=%temp%\Entf.vbs
>%E% echo F=WScript.Arguments(0):T=CreateObject("Scripting.FileSystemObject").OpenTextFile(F).ReadAll:WScript.Echo Replace(T,"%Entf%","")
cscript //nologo %E% %KT%>"%KF%"
Grüße
bastla
Hallo Jamesb10!
Hatte leider noch einen Tippfehler
(ist jetzt auch oben korrigiert) ...
Die (noch leicht angepasste) Komplettfassung sähe dann so aus:
[Edit] Anführungszeichen in Zeile 2 zurechtgerückt [/Edit]
Grüße
bastla
Hatte leider noch einen Tippfehler
Die (noch leicht angepasste) Komplettfassung sähe dann so aus:
@echo off & setlocal
set "katalog=c:\Speicher_1.txt"
set "KF=C:\Katalog_fertig.txt"
set "Entf=.50.99.rec"
tree "d:\recordings" /f /a >"%katalog%"
set "KT=%temp%\kat.txt"
findstr /v "\.vdr" "%katalog%"|findstr /e /v "| | |">%KT%
set E=%temp%\Entf.vbs
>%E% echo F=WScript.Arguments(0):WScript.Echo Replace(CreateObject("Scripting.FileSystemObject").OpenTextFile(F).ReadAll,"%Entf%","")
cscript //nologo %E% %KT%>"%KF%"
Grüße
bastla
... da ich momentan nicht mehr Zeit habe, ein schematischer Ansatz:
Anstelle der "
Grüße
bastla
@echo off & setlocal
set "Basis=D:\RECORDINGS"
set "KF=D:\Katalog_fertig.txt"
del "%KF%" 2>nul
for /f "delims=" %%i in ('dir /s /b "%Basis%\info.vdr"') do call :ProcessFile "%%i"
goto :eof
:ProcessFile
set "RelPfad=%~dp1%"
set "RelPfad=%RelPfad:~,-1%"
call set "RelPfad=%%RelPfad:%Basis%\=%%"
for /f "tokens=1*" %%a in ('findstr /b /c:"T " %1') do set "Titel=%%b"
for /f "tokens=1*" %%a in ('findstr /b /c:"S " %1') do set "Episode=%%b"
echo %RelPfad%
echo %Titel%
echo %Episode%
echo\
goto :eof
echo
"-Zeilen 15 - 18 könntest Du nach dem Testen etwas in der Art verwenden:>>"%KF%" echo %RelPfad%_%Titel%_%Episode%
bastla
Hallo Jamesb10!
Da Batch verschiedene Sonderzeichen (in diesem Fall wird es wohl ein "&" sein) "interpretiert" (und nicht einfach als Text ausgibt), könnte ein einfacher Workaraound darin bestehen, jede Zeile unter Anführungszeichen gesetzt in die Zieldatei zu schreiben - wenn die Anführungszeichen sehr stören, kannst Du diese ja anschließend per Editor oder Word mit "Suchen / Ersetzen" eliminieren.
Die Ausgabezeile würde dann im Batch also etwa so aussehen:
Grüße
bastla
Da Batch verschiedene Sonderzeichen (in diesem Fall wird es wohl ein "&" sein) "interpretiert" (und nicht einfach als Text ausgibt), könnte ein einfacher Workaraound darin bestehen, jede Zeile unter Anführungszeichen gesetzt in die Zieldatei zu schreiben - wenn die Anführungszeichen sehr stören, kannst Du diese ja anschließend per Editor oder Word mit "Suchen / Ersetzen" eliminieren.
Die Ausgabezeile würde dann im Batch also etwa so aussehen:
>>"%KF%" echo "%Titel% %Episode%"
bastla
Moin Jamesb10,
es kann an der Fülle deiner Filme liegen - ich weiss jedenfalls nicht, in welchem Film du gerade bist.
Lass uns da mal einen Schnitt machen...
Was immer auch bastla mal später vorgelesen wird aus dem Buch des Lebens, zwei Dinge sind sicherlich nicht dabei:
a) er wurde nie in flagranti bei der Tätigkeit "Umbennen" ertappt
b) und insbesondere bei der Erstellung einer umformatierten B-Movie-Bestandsliste wäre er nie versehentlich in eine Umbenamserei abgedriftet.
Hast du denn Teile der Skriptschnipsel in andere Skripte eingebaut und if so, wie sehen die denn aus?
Grüße
Biber
es kann an der Fülle deiner Filme liegen - ich weiss jedenfalls nicht, in welchem Film du gerade bist.
Lass uns da mal einen Schnitt machen...
Was immer auch bastla mal später vorgelesen wird aus dem Buch des Lebens, zwei Dinge sind sicherlich nicht dabei:
a) er wurde nie in flagranti bei der Tätigkeit "Umbennen" ertappt
b) und insbesondere bei der Erstellung einer umformatierten B-Movie-Bestandsliste wäre er nie versehentlich in eine Umbenamserei abgedriftet.
Hast du denn Teile der Skriptschnipsel in andere Skripte eingebaut und if so, wie sehen die denn aus?
Grüße
Biber
@Biber
Danke für den Versuch der Ehrenrettung
- allerdings wäre ich nicht davon ausgegangen, dass Jamesb10 mir (oder dem von mir verbrochenen Batch) den Umbenams
-Fehler anlasten wollte ...
Grüße
bastla
P.S.: Es gibt übrigens neben dem "Umbennen" noch mehr gute Gründe, den Ort "Flagranti" zu meiden ...
Danke für den Versuch der Ehrenrettung
Grüße
bastla
P.S.: Es gibt übrigens neben dem "Umbennen" noch mehr gute Gründe, den Ort "Flagranti" zu meiden ...
Hallo Jamesb10!

Das Umbenennen des fraglichen Ordners per Linux wäre vermutlich einen Versuch wert (wenn Du ohnehin schon mit einem linux-basierten System Zugriff hast, brauche ich nicht auf "Knoppix" etc zu verweisen).
Wenn auch das Löschen eine Option ist, könntest Du alle anderen Ordner nach zB "D:\BACKUP" verschieben und dann, wenn sich wirklich ganz sicher, doppelt kontrolliert, nur mehr der "kaputte" Ordner in "D:\RECORDINGS" befindet, letzteren mit
von der Kommandozeile aus zu löschen versuchen - im Erfolgsfall danach den Ordner "RECORDINGS" neu erstellen und die verschobenen Ordner wieder zurückholen ...
Grüße
bastla
Die modifizierte Zeile 6 geht auch nur bis "Der Marshal".
... was mich leider nicht wirklich überrascht ... Das Umbenennen des fraglichen Ordners per Linux wäre vermutlich einen Versuch wert (wenn Du ohnehin schon mit einem linux-basierten System Zugriff hast, brauche ich nicht auf "Knoppix" etc zu verweisen).
Wenn auch das Löschen eine Option ist, könntest Du alle anderen Ordner nach zB "D:\BACKUP" verschieben und dann, wenn sich wirklich ganz sicher, doppelt kontrolliert, nur mehr der "kaputte" Ordner in "D:\RECORDINGS" befindet, letzteren mit
rd /s "D:\RECORDINGS"
Grüße
bastla
Hallo Jamesb10!
Eine adaptierte Version des Batches:
Falls Du die Pfadangabe im jeweiligen Speicher (%RelPfad%) nicht benötigst, können die Zeilen 13 bis 15 (und natürlich der entsprechende Teil des "
Grüße
bastla
Eine adaptierte Version des Batches:
@echo off & setlocal
set "KF=D:\Katalog_fertig.txt"
set /a Zaehler=1
del "%KF%" 2>nul
for %%s in (d:\recordings e:\recordings f:\recordings \\vdr\hd0\recordings \\vdr\hd\recordings \\vdr1\hd\recordings \\vdr2\hd\recordings) do (
for /f "delims=" %%i in ('dir /s /b "%%s\info.vdr"') do call :ProcessFile "%%i" "%%s"
)
goto :eof
:ProcessFile
set "Speicher=%~2"
set "RelPfad=%~dp1%"
set "RelPfad=%RelPfad:~,-1%"
call set "RelPfad=%%RelPfad:%Speicher%\=%%"
set "Titel=???"
for /f "tokens=1*" %%a in ('findstr /b /c:"T " %1') do set "Titel=%%b"
set "Episode=???"
for /f "tokens=1*" %%a in ('findstr /b /c:"S " %1') do set "Episode=%%b"
>>"%KF%" echo %Zaehler%-%Titel%-%Episode%-%Speicher%(-%RelPfad%)
set /a Zaehler+=1
goto :eof
echo
" in Zeile 20) entfallen ...Grüße
bastla
Hallo Jamesb10!
Die Benennung des Speichers nach Deinem Wunsch sollte sich auch noch machen lassen - (ungetestet) etwa so:
Noch viel Spaß bei der "Arbeit" ... 
Grüße
bastla
Die Benennung des Speichers nach Deinem Wunsch sollte sich auch noch machen lassen - (ungetestet) etwa so:
@echo off & setlocal
set "KF=D:\Katalog_fertig.txt"
set /a Zaehler=1
del "%KF%" 2>nul
for %%a in ("d:\recordings@Speicher 1" "e:\recordings@Speicher 2" "f:\recordings@Speicher 3" "\\vdr\hd0\recordings@Stube VDR-Recorder" "\\vdr\hd\recordings@320 GB" "\\vdr1\hd\recordings@Kind eins VDR-Recorder" "\\vdr2\hd\recordings@Kind zwei VDR-Recorder") do (
for /f "tokens=1-2 delims=@" %%r in (%%a) do (
for /f "delims=" %%i in ('dir /s /b "%%r\info.vdr" 2^>nul') do call :ProcessFile "%%i" "%%r" "%%s"
)
)
goto :eof
:ProcessFile
set "SpeicherPfad=%~2"
set "Speicher=%~3"
set "RelPfad=%~dp1%"
set "RelPfad=%RelPfad:~,-1%"
call set "RelPfad=%%RelPfad:%SpeicherPfad%\=%%"
set "Titel=???"
for /f "tokens=1*" %%a in ('findstr /b /c:"T " %1') do set "Titel=%%b"
set "Episode=???"
for /f "tokens=1*" %%a in ('findstr /b /c:"S " %1') do set "Episode=%%b"
>>"%KF%" echo %Zaehler%-%Titel%-%Episode%-%Speicher%(-%RelPfad%)
set /a Zaehler+=1
goto :eof
Grüße
bastla
[OT]
Moin jamesb10,
Bitte in diesem Zweigarm des Forums die obermaximalige Anzahl von blumigen Bildern pro Halbsatz auf 1 beschränken.
Mehr verwende ich auch nicht.
Außerdem solltest du nicht sprachliche oder anatomische Unglaublichkeiten heraufbeschwören, die unvorbereitete MitleserInnen am frühen Wochenend-Mittag an die Frau des Cheffes erinnern könnten.
P.S. Wegen des running gag counters "rgc", mit dem hier die Standard-Variationen des Wortes "Umbenennen" gezählt werden...
->kein Handlungsbedarf für dich.
Grüße
Biber
[/OT]
Moin jamesb10,
Bitte in diesem Zweigarm des Forums die obermaximalige Anzahl von blumigen Bildern pro Halbsatz auf 1 beschränken.
Mehr verwende ich auch nicht.
Außerdem solltest du nicht sprachliche oder anatomische Unglaublichkeiten heraufbeschwören, die unvorbereitete MitleserInnen am frühen Wochenend-Mittag an die Frau des Cheffes erinnern könnten.
P.S. Wegen des running gag counters "rgc", mit dem hier die Standard-Variationen des Wortes "Umbenennen" gezählt werden...
->kein Handlungsbedarf für dich.
Grüße
Biber
[/OT]
Hallo Jamesb-10!
Zum Thema "info.txt" und "info.vdr" sollte es genügen, die Zeile
zu verwenden (soferne nicht beide Dateien im gleichen Ordner vorkommen).
Das Prozentzeichen am Beginn der Ordnernamen ist für Batch leider suboptimal - ließe sich das nicht durch zB "#" ersetzen?
Grüße
bastla
P.S.: Für die "Code"-Formatierung bitte "[" und "]" durch "<" und ">" ersetzen ...
Zum Thema "info.txt" und "info.vdr" sollte es genügen, die Zeile
for /f "delims=" %%i in ('dir /s /b "%%r\info.txt" /s /b "%%r\info.vdr"2^>nul') do call :ProcessFile "%%i" "%%r" "%%s"
Das Prozentzeichen am Beginn der Ordnernamen ist für Batch leider suboptimal - ließe sich das nicht durch zB "#" ersetzen?
Grüße
bastla
P.S.: Für die "Code"-Formatierung bitte "[" und "]" durch "<" und ">" ersetzen ...
Hallo Jamesb10!
):
Grüße
bastla
Somit hab ich das gefühl, es ist das aus für mein Script ??
Bevor das Gewehr im Getreide landet, solltest Du vielleicht noch folgende Version testen (hab ich nämlich nicht gemacht @echo off & setlocal
set "KF=D:\Katalog_fertig.txt"
set /a Zaehler=1
del "%KF%" 2>nul
for %%a in ("d:\recordings@Speicher 1" "e:\recordings@Speicher 2" "f:\recordings@Speicher 3" "\\vdr\hd0\recordings@Stube VDR-Recorder" "\\vdr\hd\recordings@320 GB" "\\vdr1\hd\recordings@Kind eins VDR-Recorder" "\\vdr2\hd\recordings@Kind zwei VDR-Recorder") do (
for /f "tokens=1-2 delims=@" %%r in (%%a) do (
for /f "delims=" %%i in ('dir /s /b "%%r\info.txt" /s /b "%%r\info.vdr"2^>nul') do set "RelPfad=%%~dpi" & set "Datei=%%i" & call :ProcessFile "%%r" "%%s"
)
)
goto :eof
:ProcessFile
set "SpeicherPfad=%~1"
set "Speicher=%~2"
set "RelPfad=%RelPfad:~,-1%"
call set "RelPfad=%%RelPfad:%SpeicherPfad%\=%%"
set "Titel=???"
for /f "tokens=1*" %%a in ('findstr /b /c:"T " "%Datei%"') do set "Titel=%%b"
set "Episode=???"
for /f "tokens=1*" %%a in ('findstr /b /c:"S " %Datei%"') do set "Episode=%%b"
>>"%KF%" echo %Zaehler%-%Titel%-%Episode%-%Speicher%(-%RelPfad%)
set /a Zaehler+=1
goto :eof
bastla