Suchen und zählen von einem String in Dateien in Unterverzeichnissen
Hallo,
ich habe ein Verzeichnis, in dem viele Unterverzeichnisse liegen.
Jedes Unterverzeichnis enthält eine Datei namens daten.txt.
Ich möchte alle diese Dateien in allen Unterverzeichnissen durchsuchen, ob sie den String "<HUGO" enthalten.
Dabei ist wichtig, wie oft der String enthalten ist, denn ich brauche nur die Dateien aus den Verzeichnissen, wo <HUGO mehr als einmal drin steht.
Beispiel:
Unterverzeichnis 1 heißt UV1 und enthält in daten.txt:
<HUGO
Unterverzeichnis 2 heißt UV2 und enthält in daten.txt:
<EVA
<HUGO
<FRANK
<HUGO
Ich dachte mit findstr /s "<HUGO" daten.txt > xx.txt
bekäme ich in der Datei xx.txt wenigstens die Zeilen raus, in denen <HUGO steht, aber schon da scheitere ich, vielleicht, weil die Dateien sehr groß sind? Mit den kleinen Testdateien bekomme ich
Quelle.bat:findstr /s "<HUGO" *.* > xx.txtUV1\daten.txt:<HUGOUV2\daten.txt:<HUGO
UV2\daten.txt:<HUGO
Daraus kann ich zwar erkennen, dass im UV1 nur einmal und im UV2 zweimal <HUGO steht, aber es ist doch sehr mühsam zu lesen. Gibt es eine Möglichkeit mit einer Schleife da drüber zu gehen und die Hugos zu zählen?
Danke für eure Zeit
Ivy
ich habe ein Verzeichnis, in dem viele Unterverzeichnisse liegen.
Jedes Unterverzeichnis enthält eine Datei namens daten.txt.
Ich möchte alle diese Dateien in allen Unterverzeichnissen durchsuchen, ob sie den String "<HUGO" enthalten.
Dabei ist wichtig, wie oft der String enthalten ist, denn ich brauche nur die Dateien aus den Verzeichnissen, wo <HUGO mehr als einmal drin steht.
Beispiel:
Unterverzeichnis 1 heißt UV1 und enthält in daten.txt:
<HUGO
Unterverzeichnis 2 heißt UV2 und enthält in daten.txt:
<EVA
<HUGO
<FRANK
<HUGO
Ich dachte mit findstr /s "<HUGO" daten.txt > xx.txt
bekäme ich in der Datei xx.txt wenigstens die Zeilen raus, in denen <HUGO steht, aber schon da scheitere ich, vielleicht, weil die Dateien sehr groß sind? Mit den kleinen Testdateien bekomme ich
Quelle.bat:findstr /s "<HUGO" *.* > xx.txtUV1\daten.txt:<HUGOUV2\daten.txt:<HUGO
UV2\daten.txt:<HUGO
Daraus kann ich zwar erkennen, dass im UV1 nur einmal und im UV2 zweimal <HUGO steht, aber es ist doch sehr mühsam zu lesen. Gibt es eine Möglichkeit mit einer Schleife da drüber zu gehen und die Hugos zu zählen?
Danke für eure Zeit
Ivy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6144475516
Url: https://administrator.de/forum/suchen-und-zaehlen-von-einem-string-in-dateien-in-unterverzeichnissen-6144475516.html
Ausgedruckt am: 03.05.2025 um 02:05 Uhr
5 Kommentare
Neuester Kommentar

Powershell
Gruß sid
Get-ChildItem "D:\Ordner" -File -Filter "daten.txt" -Recurse | ?{[regex]::matches((get-Content $_.Fullname -Raw),'(?i)<HUGO').count -gt 1} | select -Expand DirectoryName
Gruß sid

Zitat von @IvyNoname:
Bisher habe ich noch nichts mit Powershell gemacht, ich habe bisher nur einfache DOS-Batchs benutzt. Ich weiß auch nicht, ob das bei uns im Büro überhaupt installiert ist.
Ist per Default in jedem Windows enthalten!Bisher habe ich noch nichts mit Powershell gemacht, ich habe bisher nur einfache DOS-Batchs benutzt. Ich weiß auch nicht, ob das bei uns im Büro überhaupt installiert ist.
Falls nicht, melde ich mich nochmal, ob es auch eine DOS-Lösung gibt 
CMD geht natürlich auch, aber mal ehrlich das ist anno tobak und lahm ohne Ende, will doch heute keiner mehr ...@echo off &setlocal enabledelayedexpansion
set "quelle=D:\daten"
for /f "delims=" %%a in ('dir /a-d /b /s "%quelle%\daten.txt"') do (
set cnt=0
for /f "delims=" %%b in ('findstr /ilc:"<HUGO" "%%a" 2^>nul') do set /a cnt+=1
if !cnt! GTR 1 (
echo %%~dpa
)
)