Anhand Ordnernamen Ordner suchen und löschen
Hallo,
ich habe mal eine etwas (in meinen augen) besondere Aufgabe.
und zwar folgende Ordnerstruktur ist vorhanden:
./Haus/Maus/Baum/Foto1 fehlt
./Haus/Maus/Baum/Foto1
./Haus/Maus/Busch/Foto1 fehlt
./Haus/Maus/Birke/Foto1 fehlt
./Haus/Maus/..../Foto1 fehlt
ich möchte jetzt ein script (egal ob batch oder powershell) das alle Order nach einem "Foto1" durchsucht. Wenn er dann "./Haus/Maus/Baum/Foto1" findet soll er überprüfen ob "./Haus/Maus/Baum/Foto1 fehlt" exisitert und dann diesen ordner löschen.
Es handelt sich bei "Foto1" bzw "Foto1 fehlt" immer um ORDNER.
ich habe mal eine etwas (in meinen augen) besondere Aufgabe.
und zwar folgende Ordnerstruktur ist vorhanden:
./Haus/Maus/Baum/Foto1 fehlt
./Haus/Maus/Baum/Foto1
./Haus/Maus/Busch/Foto1 fehlt
./Haus/Maus/Birke/Foto1 fehlt
./Haus/Maus/..../Foto1 fehlt
ich möchte jetzt ein script (egal ob batch oder powershell) das alle Order nach einem "Foto1" durchsucht. Wenn er dann "./Haus/Maus/Baum/Foto1" findet soll er überprüfen ob "./Haus/Maus/Baum/Foto1 fehlt" exisitert und dann diesen ordner löschen.
Es handelt sich bei "Foto1" bzw "Foto1 fehlt" immer um ORDNER.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 300857
Url: https://administrator.de/forum/anhand-ordnernamen-ordner-suchen-und-loeschen-300857.html
Ausgedruckt am: 21.02.2025 um 11:02 Uhr
19 Kommentare
Neuester Kommentar

Powershell
Batch
Gruß jodel32
gci 'C:\Ordner' -Filter 'Foto1 fehlt' -recurse | ?{$_.PSIsContainer -and (Test-Path "$($_.Parent.Fullname)\Foto1")} | remove-item -Force -Recurse
for /f "delims=" %%a in ('dir /b /s /AD "C:\Ordner" ^| findstr /iec:"\\Foto1" 2^>nul') do (
if exist "%%~dpaFoto1 fehlt" rd "%%~dpaFoto1 fehlt" /s /q
)

Ach so sorry ist oben angepasst...

Kleiner Typo im PS Skript, ist oben korrigiert.

Geht hier einwandfrei! Die "Executionpolicy" hast du aber schon freigeschaltet ?
Zur Info: Bei den Skripten wird nichts ausgegeben nur gelöscht.
Der Fehler muss bei dir und deiner Anpassung liegen.
Zur Info: Bei den Skripten wird nichts ausgegeben nur gelöscht.
Der Fehler muss bei dir und deiner Anpassung liegen.

Hast du deine PS up to date? Min. PS 3.0. Habe es hier mit deiner Ordnerstruktur einwandfrei getestet. Sowohl das PS Skript als auch das Batch machen alles genau wie du es beschrieben hast. Die Skripte sind ja nun wirklich keine Herausforderung
. Alles Kinderkram.
Das du das 'C:\Ordner' an deine Umgebung anpassen musst, sollte klar sein.
Das du das 'C:\Ordner' an deine Umgebung anpassen musst, sollte klar sein.

Weil in einfachen Hochkommas eventuelle Sonderzeichen durch die PS nicht expandiert werden! Das ist best Practice wenn man keine Variablen einbauen möchte.
Alternativ kann man es auch so schreiben
Das lüppt ebenfalls problemlos, mach ich ja Tag für Tag min Jung!!
Entweder hast du es hier nicht korrekt beschrieben oder etwas was ich hier nicht sehen kann macht du falsch, sorry!
EDIT: Die Batch funktioniert. Wieso aber die powershell nicht?
Keine Ahnung. Läuft hier wie gesagt einwandfrei.Alternativ kann man es auch so schreiben
gci 'C:\Ordner' -recurse -Directory | ?{ $_.Name -eq 'Foto1 fehlt' -and (Test-Path "$($_.Parent.Fullname)\Foto1")} | remove-item -Force -Recurse
Entweder hast du es hier nicht korrekt beschrieben oder etwas was ich hier nicht sehen kann macht du falsch, sorry!

Zitat von @functionstrut:
Wäre es auch möglich das ganze in eine Schleife zu stecken? also das er diesen powershellcode für Foto1 bis Foto20 zum beispiel ausführt?
LogischWäre es auch möglich das ganze in eine Schleife zu stecken? also das er diesen powershellcode für Foto1 bis Foto20 zum beispiel ausführt?
$folders = gci 'C:\Ordner' -recurse -Directory
1..20 | %{
$num = $_
$folders | ?{ $_.Name -eq "Foto$num fehlt" -and (Test-Path "$($_.Parent.Fullname)\Foto$num")} | remove-item -Force -Recurse
}

Wars das jetzt, Monsieur?... das ist hier ja kein Wunschkonzert.
Please read now!
$folders = gci 'C:\Ordner' -recurse -Directory
1..20 | %{
$num = $_
$folders | %{
if ($_.Name -eq "Foto$num fehlt" -and (Test-Path "$($_.Parent.Fullname)\Foto$num")){
remove-item $_ -Force -Recurse
}
if ($_.Name -eq 'FotoFinish' -and !(Test-Path "$($_.Parent.Fullname)\Foto$num fehlt")){
md "$($_.Parent.Fullname)\Fotos alle da"
}
}
}

Zitat von @functionstrut:
Einen Wunsch hätt ich noch
ich habs zwar selber probiert aber so wirklich funktioniert es nicht. Er soll zusätzlich wenn "FotosFinish" und "Foto1 fehlt" existiert wieder den Ordner "Fotos alle da" löschen.
Einen Wunsch hätt ich noch
ich habs zwar selber probiert aber so wirklich funktioniert es nicht. Er soll zusätzlich wenn "FotosFinish" und "Foto1 fehlt" existiert wieder den Ordner "Fotos alle da" löschen.
$folders = gci 'C:\Ordner' -recurse -Directory
1..20 | %{
$num = $_
$folders | %{
if ($_.Name -eq "Foto$num fehlt" -and (Test-Path "$($_.Parent.Fullname)\Foto$num")){
remove-item $_ -Force -Recurse
}
if ($_.Name -eq 'FotoFinish' -and !(Test-Path "$($_.Parent.Fullname)\Foto$num fehlt")){
md "$($_.Parent.Fullname)\Fotos alle da"
}
if ($_.Name -eq 'FotoFinish' -and (Test-Path "$($_.Parent.Fullname)\Foto$num fehlt")){
remove-item "$($_.Parent.Fullname)\Fotos alle da" -Force -Recurse
}
}
}

So, das war jetzt die allerletzte kostenlose Anpassung von meiner Seite.... tröpfel, tröpfel ...wat kommt noch 
Wie wärs mal vor dem Anfangen alle Bedingungen festzulegen ??? Anstatt hinterher immer wieder alles umzuwerfen...
# ......
$parent = $_.Parent.Fullname
if ($_.Name -eq 'FotoFinish' -and ((1..20 | ?{Test-Path "$parent\Foto$_"}).Count -eq 20 )){
md "$parent\Fotos alle da"
}
#........