PS Skript zum Suchen von beliebigen Worten in beliebigen Verzeichnisssen
Hallo in die Runde!
ich bin neu hier und kenne mich mit dem Erstellen von Skripten (.bat oder ps) nicht aus und wäre auf Unterstützung angewiesen.
Was soll passieren?
Ich habe in einem Hauptverzeichnis beliebig viele Unterverzeichnisse geschachtelt, auf deren unterster Ebene Dateien mit der Endung .txt liegen. Hierbei handelt es sich um die mit einer OCR-Software erstellten und abgelegten Inhalte.
Suche ich unter Win 10 im Explorer nach einem Begriff (z.B. Person, Ort), so bekomme ich das dort angezeigt.
Gewünscht ist aber, dass ich vom Stammverzeichnis (soll ausgewählt werden können) aus nach zwei oder mehr Begriffen suchen kann. Und zwar als AND bzw. OR.
Die Reihenfolge von Wort 1 und Wort 2 ist egal.
Das Ergebnis sollte idealer Weise in einer neuen Datei (Suchergebnis.txt) auf dem Desktop landen.
Ich will nicht verschweigen, dass es sich um zigtausend Dateien handelt.
Für jede Unterstützung wäre ich dankbar.
Es grüßt herzlich
Jobo
ich bin neu hier und kenne mich mit dem Erstellen von Skripten (.bat oder ps) nicht aus und wäre auf Unterstützung angewiesen.
Was soll passieren?
Ich habe in einem Hauptverzeichnis beliebig viele Unterverzeichnisse geschachtelt, auf deren unterster Ebene Dateien mit der Endung .txt liegen. Hierbei handelt es sich um die mit einer OCR-Software erstellten und abgelegten Inhalte.
Suche ich unter Win 10 im Explorer nach einem Begriff (z.B. Person, Ort), so bekomme ich das dort angezeigt.
Gewünscht ist aber, dass ich vom Stammverzeichnis (soll ausgewählt werden können) aus nach zwei oder mehr Begriffen suchen kann. Und zwar als AND bzw. OR.
Die Reihenfolge von Wort 1 und Wort 2 ist egal.
Das Ergebnis sollte idealer Weise in einer neuen Datei (Suchergebnis.txt) auf dem Desktop landen.
Ich will nicht verschweigen, dass es sich um zigtausend Dateien handelt.
Für jede Unterstützung wäre ich dankbar.
Es grüßt herzlich
Jobo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 621502
Url: https://administrator.de/contentid/621502
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
8 Kommentare
Neuester Kommentar
Moin,
wie lange darf das denn dauern? Powershell (und auch jede andere Skriptsprache) ist dafür eher zu langsam. AND und OR gehen auch in Windows Search, wenn denn die Dateien indiziert sind. Aber das scheint ja der Fall, wenn es mit einfachen Begriffen geht.
https://www.howtogeek.com/school/learning-windows-search/lesson4/
hth
Erik
wie lange darf das denn dauern? Powershell (und auch jede andere Skriptsprache) ist dafür eher zu langsam. AND und OR gehen auch in Windows Search, wenn denn die Dateien indiziert sind. Aber das scheint ja der Fall, wenn es mit einfachen Begriffen geht.
https://www.howtogeek.com/school/learning-windows-search/lesson4/
hth
Erik
Probiere es mal mit folgendem Skript. Am besten mal mit einem kleinen Ordner anfangen um zu schauen, wie lang es letztendlich braucht.
Function Get-Folder($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")|Out-Null
$Ordnername = New-Object System.Windows.Forms.FolderBrowserDialog
$Ordnername.Description = "Ordner auswählen"
$Ordnername.rootfolder = "MyComputer"
if($Ordnername.ShowDialog() -eq "OK")
{
$Ordner += $Ordnername.SelectedPath
}
return $Ordner
}
$Path = Get-Folder
$Text = read-host "Gebe den zu suchenden Text ein"
$PathArray = @()
# This code snippet gets all the files in $Path
Get-ChildItem $Path -recurse -Filter "*" |
Where-Object { $_.Attributes -ne "Directory"} |
ForEach-Object {
If (Get-Content $_.FullName | Select-String -Pattern $Text) {
$PathArray += $_.FullName
}
}
Write-Host "Contents of ArrayPath:"
$PathArray | % {$_} | Out-File "C:\Users\Public\Desktop\Suchergebnis.txt"
Hallo Jobo10437,
Eventuell kannst du dir aus diesem Beitrag:
Powershell - Lösche Datei wenn String in Filename enthalten
etwas basteln.
Grüße
Tsuki
Eventuell kannst du dir aus diesem Beitrag:
Powershell - Lösche Datei wenn String in Filename enthalten
etwas basteln.
Grüße
Tsuki
Function Get-Folder($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")|Out-Null
$Ordnername = New-Object System.Windows.Forms.FolderBrowserDialog
$Ordnername.Description = "Ordner auswählen"
$Ordnername.rootfolder = "MyComputer"
if($Ordnername.ShowDialog() -eq "OK")
{
$Ordner += $Ordnername.SelectedPath
}
return $Ordner
}
$Path = Get-Folder
$Text = read-host "Gebe den zu suchenden Text ein"
$Text2 = read-host "Gebe den zu suchenden Text ein"
$PathArray = @()
# This code snippet gets all the files in $Path
Get-ChildItem $Path -recurse -Filter "*" |
Where-Object { $_.Attributes -ne "Directory"} |
ForEach-Object {
If (Get-Content $_.FullName | Select-String -Pattern $Text, Text2) {
$PathArray += $_.FullName
}
}
Write-Host "Contents of ArrayPath:"
$PathArray | % {$_} | Out-File "C:\Users\Public\Desktop\Suchergebnis.txt"