Batch: Vorkommen eines strings in mehreren Dateien zählen und pro Datei ausgeben
Hallo,
ich muss später über 180 Dateien (mehr als 3 GB) auf das Auftreten bestimmter Strings durchsuchen um zu vergleichen, wie sich die verschiedenen Dateien unterscheiden. Bisher habe ich ein wenig zusammengebastelt, allerdings erfolgt die Ausgabe der Zählvariable, bevor sie gefüllt wird. Was mache ich falsch bzw. welchen ganz anderen Ansatz (ggf. powershell) gibt es?
Im folgenden habe ich Pfad, Dateinamen, Suchstring usw angepasst, damit es besser lesbar ist.
Mein bisheriger Code liegt in der Datei ABCsuchen.bat:
set suchstring="ABC"
set datei=%suchstring%-Anzahl.txt
set pfad=D:\test\teil1
set /a Anzahl=0
for %%f in (%pfad%\*) do (
set /a Anzahl=0
for /f "delims=)" %%i in ('findstr /c:%suchstring% %%f^|findstr /n "^"') do set /a Anzahl=%%i
echo %%~nf : %Anzahl% >> %datei% )
Im angegebenen Pfad liegt derzeit nur eine Datei testdatei.txt mit folgendem Inhalt:
ABC
DEF
ABC
GHI
JKL
ABC
MNO
Ich rufe aus der cmd-shell auf: ABCsuchen.bat > log.txt
In der cmd-shell sehe ich daraufhin:
Fehlender Operator
Fehlender Operator
Fehlender Operator
Die entstehende Ergebnis-Datei ABC-Anzahl.txt enthält:
testdatei : 0
In der Datei log.txt steht dann auch die Erklärung:
D:\test>set suchstring="ABC"
D:\test>set datei="ABC"-Anzahl.txt
D:\test>set pfad=D:\test\teil1
D:\test>set /a Anzahl=0
D:\test>for %f in (D:\test\teil1\*) do (
set /a Anzahl=0
for /F "delims=)" %i in ('findstr /c:"ABC" %f|findstr /n "^"') do set /a Anzahl=%i
echo %~nf : 0 1>>"ABC"-Anzahl.txt
)
D:\test>(
set /a Anzahl=0
for /F "delims=)" %i in ('findstr /c:"ABC" D:\test\teil1\testdatei.txt|findstr /n "^"') do set /a Anzahl=%i
echo testdatei : 0 1>>"ABC"-Anzahl.txt
)
D:\test>set /a Anzahl=1:ABC
D:\test>set /a Anzahl=2:ABC
D:\test>set /a Anzahl=3:ABC
Schon mal Danke an alle, die überhaupt bis hier unten gelesen haben - Antworten werden natürlich gerne entgegen genommen
ole-objekt
ich muss später über 180 Dateien (mehr als 3 GB) auf das Auftreten bestimmter Strings durchsuchen um zu vergleichen, wie sich die verschiedenen Dateien unterscheiden. Bisher habe ich ein wenig zusammengebastelt, allerdings erfolgt die Ausgabe der Zählvariable, bevor sie gefüllt wird. Was mache ich falsch bzw. welchen ganz anderen Ansatz (ggf. powershell) gibt es?
Im folgenden habe ich Pfad, Dateinamen, Suchstring usw angepasst, damit es besser lesbar ist.
Mein bisheriger Code liegt in der Datei ABCsuchen.bat:
set suchstring="ABC"
set datei=%suchstring%-Anzahl.txt
set pfad=D:\test\teil1
set /a Anzahl=0
for %%f in (%pfad%\*) do (
set /a Anzahl=0
for /f "delims=)" %%i in ('findstr /c:%suchstring% %%f^|findstr /n "^"') do set /a Anzahl=%%i
echo %%~nf : %Anzahl% >> %datei% )
Im angegebenen Pfad liegt derzeit nur eine Datei testdatei.txt mit folgendem Inhalt:
ABC
DEF
ABC
GHI
JKL
ABC
MNO
Ich rufe aus der cmd-shell auf: ABCsuchen.bat > log.txt
In der cmd-shell sehe ich daraufhin:
Fehlender Operator
Fehlender Operator
Fehlender Operator
Die entstehende Ergebnis-Datei ABC-Anzahl.txt enthält:
testdatei : 0
In der Datei log.txt steht dann auch die Erklärung:
D:\test>set suchstring="ABC"
D:\test>set datei="ABC"-Anzahl.txt
D:\test>set pfad=D:\test\teil1
D:\test>set /a Anzahl=0
D:\test>for %f in (D:\test\teil1\*) do (
set /a Anzahl=0
for /F "delims=)" %i in ('findstr /c:"ABC" %f|findstr /n "^"') do set /a Anzahl=%i
echo %~nf : 0 1>>"ABC"-Anzahl.txt
)
D:\test>(
set /a Anzahl=0
for /F "delims=)" %i in ('findstr /c:"ABC" D:\test\teil1\testdatei.txt|findstr /n "^"') do set /a Anzahl=%i
echo testdatei : 0 1>>"ABC"-Anzahl.txt
)
D:\test>set /a Anzahl=1:ABC
D:\test>set /a Anzahl=2:ABC
D:\test>set /a Anzahl=3:ABC
Schon mal Danke an alle, die überhaupt bis hier unten gelesen haben - Antworten werden natürlich gerne entgegen genommen
ole-objekt
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 270021
Url: https://administrator.de/contentid/270021
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
3 Kommentare
Neuester Kommentar
Mit Powershell schnell erledigt:
Für eine Gesamtanzahl an Matches aller Files:
oder noch kompakter mit Auflistung der Dateinamen und Anzahl Matches:
Gruß jodel32
Für eine Gesamtanzahl an Matches aller Files:
$suchwort = "ABC"
$cnt = 0
gci 'c:\quellordner\*.txt' | %{$cnt += [regex]::matches((gc $_.Fullname),[regex]::Escape($suchwort)).Count}
write-host "Anzahl der Einträge gefunden: $cnt"
select-string -Path "C:\quellordner\*.txt" -SimpleMatch -Pattern "ABC" | group Path | ft name,count -AutoSize -Wrap
Hatte ich ja oben ergänzt Parameter -Autosize -Wrap