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-Key: 571752

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

Printed on: April 19, 2024 at 05:04 o'clock

Member: TK1987
Solution TK1987 May 14, 2020 updated at 10:42:20 (UTC)
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
Mitglied: 144260
Solution 144260 May 14, 2020 updated at 10:40:15 (UTC)
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?!
Member: Server-Nutzer
Server-Nutzer May 14, 2020 at 10:54:19 (UTC)
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.