server-nutzer
Goto Top

Suchworte in Textdateien per find auswerfen, aber auch x-Zeilen danach mitausgeben

Hallo in die Runde.

Ich möchte in Dateien per "find" bestimmte Zeilen finden und ausgeben. Soweit so einfach.
Die gesuchte Information steht aber i.d.R. in der Zeile (oder auch mehrere Zeilen) DANACH in der Datei.

Beispiel: Textauszug aus "DATEI.html" (hier die Zeilen 507 bis 510)
                            <tr>
                                <td width="40%"><span><b>Original Dateiname:</b></span></td>  
                                <td><span>2012-08-23-xyzabcd-bcvdf-Mueller (11).jpg</span></td>
                            </tr>

.

Ich durchsuche in der Kommandozeile (nicht Powershell) per "find" die Datei und bekomme folgende Ausgabe (hier mit Zeilennummer).
C:\Users\xxx\Downloads>find /N "Original Dateiname:" "DATEI.html"  

---------- DATEI.HTML
[508]                                <td width="40%"><span><b>Original Dateiname:</b></span></td>  

Die für mich relevante Info steht aber in der Zeile danach (siehe oben). Jetzt würde ich gern die Zeile 509 aus "DATEI.html" rausziehen. Wie kann ich das realisieren?

Oder gibt es einen Kommandozeilen-Befehl, um die Zeile 509 oder einen Zeilenbereich (hier 508 bis 509) aus einer Datei herauszuziehen?

Herzlichen Dank
Jörg

Content-ID: 571752

Url: https://administrator.de/forum/suchworte-in-textdateien-per-find-auswerfen-aber-auch-x-zeilen-danach-mitausgeben-571752.html

Ausgedruckt am: 21.12.2024 um 18:12 Uhr

TK1987
Lösung TK1987 14.05.2020 aktualisiert um 12:42:20 Uhr
Goto Top
Moin Jörg,

@echo off
:: Zeilennummer ermitteln
  for /f "Tokens=1 Skip=2 Delims=" %%A in ('find /N "Original Dateiname:" "DATEI.html"') do set Zeile=%%A  

:: Zeile danach ausgeben
  for /f "skip=%Zeile% usebackq Delims=" %%A in ("DATEI.html") do (  
    set Ausgabe=%%A
    goto :Next
    )
	 
:Next
echo "%Ausgabe%"  

pause

Gruß Thomas
144260
Lösung 144260 14.05.2020 aktualisiert um 12:40:15 Uhr
Goto Top
Oder auch
@echo off
set "file=C:\datei.html"  
powershell -EP Bypass -C "[regex]::Match((gc '%file%' -raw),'(?is)(?<=Original Dateiname:.*?<span>)[^<]+').Value"  

Ergebnis gleich in bereinigter Ausgabe:
2012-08-23-xyzabcd-bcvdf-Mueller (11).jpg

Aber wieso man bei sowas heutzutage noch mit Batch rum hampelt... weiß der Geier?!
Server-Nutzer
Server-Nutzer 14.05.2020 um 12:54:19 Uhr
Goto Top
Hallo Ihr Beiden und danke für Eure Skripte face-smile

Der Dreizeiler von Dir, killpid, hilft schon mal sehr weiter. Dankeschön!

Zur Frage "Wieso/weiß der Geier?":
Naja, ich hab da etwa 4.100 Dateien aus einem Backup einer alten Bilddatenbank und ich will mich nicht händisch hinsetzen und die Infos aus den Beschreibungsdateien raussuchen.

Und da ich nahezu "Null" Programmierungsskills habe, taste ich mich halt mit meinen vorhandenen Kenntnissen an mögliche - wenn auch unkonventionelle - Lösungen heran.

Hab auch schon Maus- und Tastaturrekorder für bestimmte Dinge genutzt. Sicherlich mehr als umständlich, hat aber 4.100 Mal den selben "Handgriff" gemacht (über Nacht) und ich war weitestgehend fertig face-smile

Das Ergebnis zählt.