ivynoname
Goto Top

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 face-smile
Ivy

Content-Key: 6144475516

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

Printed on: May 3, 2024 at 06:05 o'clock

Mitglied: 7907292512
Solution 7907292512 Oct 16, 2023 at 12:46:10 (UTC)
Goto Top
Powershell
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
Member: IvyNoname
IvyNoname Oct 16, 2023 at 15:58:45 (UTC)
Goto Top
Hallo Sid,
vielen Dank für Deine Hilfe.
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. Aber ich werde mal googeln, wie das geht und dann sehe ich ja morgen, ob wir das haben.
Falls nicht, melde ich mich nochmal, ob es auch eine DOS-Lösung gibt face-smile
Liebe Grüße
Ivy
Mitglied: 7907292512
Solution 7907292512 Oct 16, 2023 updated at 16:26:35 (UTC)
Goto Top
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!
Falls nicht, melde ich mich nochmal, ob es auch eine DOS-Lösung gibt face-smile
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
	)
)
Member: IvyNoname
IvyNoname Oct 16, 2023 at 18:16:50 (UTC)
Goto Top
Hallo Sid,
vielen Dank für die zweite Version face-smile
Nicht alles, was in Windows enthalten ist kann bei uns auch benutzt werden, deshalb müsste ich es probieren.
Ich kann bei uns ja nicht mal in Word einstellen, wie häufig auto-gespeichert wird.
Naja, jedenfalls kann ich weder PowerShell noch CMD, bei mir reichts gerade so, um Dateien mit bestimmten Eigenschaften zu verschieben und das auch nur dank Google.
Ich bin schon sehr gespannt auf morgen, da werde ich es ausprobieren face-big-smile
Danke sehr und einen schönen Abend wünsche ich dir
Ivy
Member: IvyNoname
IvyNoname Oct 17, 2023 at 15:20:32 (UTC)
Goto Top
Hallo Sid,
heute habe ich es ausprobiert.
Ich muss zugeben, dass ich zuerst die CMD-Version ausprobiert habe, naja, man neigt halt dazu die Dinge zu verwenden, mit denen man sich ein bisschen auskennt. Aber diese Version hat nur mit meinen Testdateien funktioniert, nicht mit den richtigen, keine Ahnung warum.
Also hab ich PowerShell aufgerufen und das ging tatsächlich. Ich hätte wirklich vermutet, dass das bei uns im Büro irgendwie abgeklemmt ist, ist es aber nicht. Und diese Version hat funktioniert!!! face-smile
Vielen Dank, das erspart mir eine Menge Suchaufwand.
Liebe Grüße
Ivy