bestimmte Verzeichnisse löschen lassen

RMH

Newbie
Registriert
Feb. 2022
Beiträge
4
Hallo,

ich möchte in einem bestimmten Laufwerk alle Verzeichnisse löschen, die
  • im Namen einen bestimmten Text haben und/oder
  • deren Inhalt mit diesem Text endet

Beispiel:
  • Laufwerk T:\
  • alle Verzeichnisse, in deren Verzeichnisnamen das Wort "flac" enthalten ist
  • alle Verzeichnisse, deren Inhalt flac-Dateien sind

Diese Verzeichnisse möchte ich mir erstmal anzeigen lassen, später dann kopieren und/oder löschen.
Aber erstmal die Ansicht, ob das auch so die richtigen Verzeichnisse sind.

Zu realisieren über eine kurze DOS-Batch, die läßt sich ja schnell mit ECHO und PAUSE versehen, damit man die Abarbeitung der einzelnen Befehle überwachen kann.

Kann mir da vielleicht jemand helfen. Ich kriege das einfach nicht hin.
Danke
 
"alle Verzeichnisse, deren Inhalt flac-Dateien sind" -> ist ausgeschlossen, dass ein Verzeichnis sowohl flac als auch andere Dateien enthält? Wenn nein, müssen alle Dateien flac-Dateien sein?
 
ja, ist ausgeschlossen, da ja schon der Verzeichnisname mit "flac" darauf hinweist, daß dort nur flac-Daeien drin sind.
Aber es gibt halt auch Verzeichnisse ohne die Bezeichnung, da weis man erst, daß flac-Dateien drin sind, wenn man in dieses Verzeichnis gewechselt ist. Daher die beiden Varianten.
 
Hi und (erstmal) willkommen im Forum...

Hat das mit der Batch eine besondere Bewandtnis?
Ansonsten sind solche Ordner-/Dateioperationen doch mit einem entsprechenden Dateimanager, bspw. MultiCommander, viel leichter zu handhaben.​
 
Ich benutze für sowas "Everything"

1.Suchauswahl (Ordner) > Eingabe= T: flac
Doppelklick öffnet Verzeichnis.

2.Suchauswahl (Audio) > Eingabe= T: .flac
Dateien können da markiert und gelöscht werden.

(Leerzeichen nach T: setzen)
 
PowerShell:
$root = "D:\Film\"
$keyword = "flac"

$folders = Get-ChildItem $root -Recurse -Force -Directory
$noKeywordFolders = @()
foreach($folder in $folders){
    if($folder -match $keyword){
        Remove-Item $folder.FullName -Force -Recurse -WhatIf
    }
    else{
        $noKeywordFolders += $folder
    }
}

foreach($folder in $noKeywordFolders){
    $files = Get-ChildItem $folder.FullName
    $files | ForEach-Object{
        if(!($_.Name.EndsWith($keyword))){
            continue
        }
    }
    Remove-item $folder.FullName -force -Recurse -whatif
}
In PowerShell.
Fütterst du mit deinem Root-Pfad, deinem Keyword.

Remove-Item kannst durch ne beliebige Aktion ersetzen (zB Move-Item), und scharfschalten kannst du es durch das entfernen der beiden "WhatIf".

Aktuell sagt er dir, was er löschen würde.
a) Alle Ordner, die $keyword enthalten
b) Alle Ordner, die exklusiv Files haben, die auf $keyword enden
 
RMH schrieb:
Aber es gibt halt auch Verzeichnisse ohne die Bezeichnung, da weis man erst, daß flac-Dateien drin sind, wenn man in dieses Verzeichnis gewechselt ist. Daher die beiden Varianten.
Und in diesen Verzeichnissen liegen dann ausschließlich flac-Dateien?

Wie sieht es übrigens mit Groß-/Kleinschreibung aus?

@wirelessy: Das würde dann auch eine Datei namen "Ich bin keine flac" erkennen, evtl wäre es besser mit einem Punkt vor dem Keyword bei der Dateien suche zu arbeiten, aber vermultich ist mein Hinweis eher akademischer Natur.

Wäre auch cool statt zwei mal redundant Remove-Item zu machen vielleicht einmal so eine Art "HandleMatchingFolder"-Funktion, damit bei Änderung des Verhaltens des Scriptes die Dinge nicht mehrmals gemacht werden müssen.
 
In das Hauptverzeichnis gehen und mit dem Datei Explorer *flac*suchen.

Das sucht beliebig viele Zeichen oder null Zeichen flac beliebig viele Zeichen oder null Zeichen
Prüfen strg+a und löschen
 
Zuletzt bearbeitet:
@Giggity: Was ja schon bissl an der Anforderung vorbei geht, ne.
@tollertyp: Jo, wie von mir beschrieben. Klar kann man das schick machen, kannst das Ding auch parametrieren und weiß der Teufel was. Alles kein Hexenwerk :)
Zählt aber alles unter Dinge, die ich nicht tun werde.
 
@wirelessy: Danke für das PS-Script. Jetzt muss ich mir erstmal die Befehle anlesen.
Ich möchte ja schließlich auch verstehen, wie das Script abläuft, nicht nur dumm abtippen und laufen lassen. Aber schwerer als früher C, C++, Pascal, Force, Cobol ... kann das nicht sein :) Selbst mit BASIC konnte man früher schön logische Programmierung lernen. Mit PS habe ich mich bisher immer etwas schwer getan.
Wird Zeit, da mich mal wieder schlau zu machen.

@User007: Ich benutze den Total Commander, der ja im Prinzip das gleiche ist wie der Multicommander, stammt ja beides von der Idee des VC (VolkovCommander) ab.
Hier kann ich zwar suchen, aber im Ergebnisfenster kann ich dann weder vieles markieren , sondern immer nur eines, noch habe ich überhaupt die Möglichkeit, das markierte dann zu löschen. Zumndest habe ich hier noch keinen Punkt dazu gefunden.
So, jetzt erstmal das PS-Script analysieren und ausprobiren...
 
Zuletzt bearbeitet:
RMH schrieb:
Ich benutze den Total Commander, [...]
[...]
Zumndest habe ich hier noch keine Punkt dazu gefunden.
Das ist das Entscheidende - hier hilft die Funktionsschaltfläche [anwenden] in der Suchergebnisansicht weiter.
Dazu mal in den FAQs: Dateisuche, Dateien suchen und anwenden (= Suchergebnisse verarbeiten) im Abschnitt Suchergebnisse "anwenden" >> als Liste anzeigen lesen.​
Kleiner Tipp dazu:
Wenn die [Umschalttaste] beim "Anwenden" gedrückt gehalten wird, wird das Suchergebnis auf einem neuen Tab geöffnet und bietet in gewohnter Weise alle Weiterverarbeitungsmöglichkeiten.

Btw.:
Allgemeiner Tipp zu TC:
Die allgemein gültige Windows-Hilfetaste [F1] bietet zur jeweiligen Funktion im aktiven TC-Fenster immer passende Anwendungshilfen/Bedienhinweise.​
 
@wirelessy:
Ich glaube übrigens der Code funktioniert nicht korrekt:
Code:
$files = Get-ChildItem $folder.FullName
$files | ForEach-Object{
    if(!($_.Name.EndsWith($keyword))){
        continue
    }
}
Remove-item $folder.FullName -force -Recurse -whatif
Warum? Meiner Meinung nach ist das continue falsch, weil es ja nur die weiteren Anweisungen innerhalb des ForEach-Loops überspringt, aber nach dem if kommt ja eh nichts mehr.
Das Remove-Item wird unabhängig vom continue immer ausgeführt.


Kannst du mir mal kurz erklären, warum das mit dem continue an der Stelle da funktioniert?

@wirelessy:
Mein Tipp bei solchen Scripten generell:
  • Anfangs nie "scharf" schalten und Remove-Item usw nutzen, sondern immer nur Logging-Ausgaben machen
  • Diese Tests anfangs auch nur in einem kleinen Bereich, also eigene Ordnerstruktur, in der alle wichtigen Fälle vorhanden sind
  • Erster "scharfer" Versuch dann auch in dem kleinen Bereich (vorher immer ein Backup davon machen, damit man immer schnell wieder einen neuen Versuch machen kann)

Erst wenn dann die Tests abgeschlossen sind eben auf der richtigen Ordnerstruktur anwenden - und dennoch auch hier lieber vorher ein Backup machen.

Das heißt dann Write-Host erst mal nutzen z.B. statt Remove-Item.
 
Zuletzt bearbeitet:
RMH schrieb:
Ich benutze den Total Commander, der ja im Prinzip das gleiche ist wie der Multicommander, stammt ja beides von der Idee des VC (VolkovCommander) ab.
Eher vom Norton Commander.
RMH schrieb:
Hier kann ich zwar suchen, aber im Ergebnisfenster kann ich dann weder vieles markieren , sondern immer nur eines, noch habe ich überhaupt die Möglichkeit, das markierte dann zu löschen.
Das geht hier problemlos, einfach auf 'Anwenden' im Ergebnisfenster klicken, mit 'Strg + A' alles markieren und dann löschen.
 
Das Continue funktioniert, weil das ForEach-Object keine Loop-Definition ist.
Das bezieht sich auf das Foreach drumherum - da musste ich auch kurz meinen Kopf drum wickeln.

Der Code ist auch nicht scharf, das -WhatIf sorgt für nen rein theoretischen Lauf.
Write-Host mache ich nicht, um die Syntax für Remove-Item auch wirklich überprüfen zu können. (Hat sich auch ausgezahlt, am Anfang hab ich $folder nur übergeben - aber da kam dann "Test", und nicht "C:\Test".)
Der Pfad "D:\Film" war auch nur mein kleiner Testordner, mit entsprechenden Testfiles/Folder drin.
 
  • Gefällt mir
Reaktionen: tollertyp
RMH schrieb:
Beispiel:
  • Laufwerk T:\
  • alle Verzeichnisse, in deren Verzeichnisnamen das Wort "flac" enthalten ist
  • alle Verzeichnisse, deren Inhalt flac-Dateien sind
Schau dir mal den Agent Ransack an. Da kannst du Dateinamen und Inhalt angeben.
Bild_2022-03-01_113728.png
 
Ponderosa schrieb:
Da kannst du Dateinamen und Inhalt angeben.​
Da braucht's nicht noch 'ne extra Software zu - das geht auch alles mit dem schon vom TE eingesetzten TC, man muß es halt nur richtig bedienen/nutzen. 😉​
 
>> Hallo RMH,
>> Ponderosa antwortete in einem von dir beobachteten Thema im ComputerBase Forum.
>> bestimmte Verzeichnisse löschen lassen

>> Ja, hab ich auch so verstanden!
Ich weiß nicht, worauf sich deine Antwort bezieht, da ich dich nie direkt angesprochen habe

>> Bitte mich nicht für einen Dummkopf zu halten!
Weder habe ich dich je direkt angesprochen noch auf irgendeine deiner Antworten zurück geantwortet

Was redest du da also, was nimmst du von mir an ?
 
@RMH:
Das ist schon lange erledigt und die betreffenden Beiträge wurden ja auch nicht ohne Grund in's Aquarium verschoben - außerdem warst wohl gar nicht Du gemeint, macht keinen Sinn da jetzt wieder drüber zu schreiben.​
 
  • Gefällt mir
Reaktionen: tollertyp und Incanus
Zurück
Oben