patrick152

Powershell Pfad von Unterordnern übergeben

Hallo,

ich habe folgendes Problem:

Ich arbeite an einem Script welches ein Laufwerk durcharbeiten soll und die Ordner in denen keine nodelete.txt Datei Vorhanden ist sollen gelöscht werden. Dafür habe ich folgenden Script:

$a = Get-ChildItem .\ -recurse | where {$_.psisContainer -eq $True}

foreach ($b in $a)
{
if (!(Test-Path -Path .$b\nodelete.txt))
{
Remove-Item .$b
}

}

und zum Testen folgende einfache Ordnerstruktur

C:\putzenTest\Ordner1
C:\putzenTest\Ordner2
C:\putzenTest\Ordner1\Unterordner1
C:\putzenTest\Ordner1\nodelete.txt
C:\putzenTest\Ordner1\Unterordner1\nodelete.txt
C:\putzenTest\Ordner2\Unterordner2
C:\putzenTest\Ordner2\nodelete.txt
C:\putzenTest\Ordner2\Unterordner2\Unterordner32
C:\putzenTest\Ordner2\Unterordner2\nodelete.txt

wende ich meine Script nun darauf an gibt es ein Problem mit den Unterordnern (hier nur die Mledung für den ersten Ordner):

Remove-Item : Der Pfad "C:\putzenTest\Unterordner1" kann nicht gefunden werden, da er nicht vorhanden ist.
In C:\putzenTest\test.ps1:8 Zeichen:3

back-to-topRemove-Item $b

back-to-top~~~~~~~~~~~~~~

back-to-topCategoryInfo : ObjectNotFound: (C:\putzenTest\Unterordner1:String) [Remove-Item], ItemNotFoundException

back-to-topFullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand


anscheinend reicht er nicht den vollen Pfad weiter. Was kann man da machen?

Zum Hintergrund (evtl. hat jemand eine bessere Lösung)
Die Mitarbeiter sollen auf einem bestimmten Laufwerk die Ordner markieren die nicht gelöscht werden sollen. Durch anlegen einer nodelete.txt in dem entsprechenden Ordner.
Anschliesend soll der Script über das Laufwerk laufen und alle Ordner die keine nodelete.txt enthalten sollen gelöscht werden.

Gruß Patrick
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 220332

Url: https://administrator.de/forum/powershell-pfad-von-unterordnern-uebergeben-220332.html

Ausgedruckt am: 28.04.2025 um 08:04 Uhr

106543
106543 24.10.2013 um 14:42:32 Uhr
Goto Top
Hi,

schonmal mit Anführungszeichen versucht ? -> ""

Grüße
Exze
patrick152
patrick152 24.10.2013 um 14:48:15 Uhr
Goto Top
Wenn ich um die Pfadangaben Anführungszeichen setzte kommt die selber Fehlermeldung nur das dann um den Nichtgefunden Pfad Anführungszeichen sind face-smile
106543
106543 24.10.2013 um 14:52:42 Uhr
Goto Top
Verstehe ich nicht, sorry face-sad
Er scheint die Pfade ja richtig auszulesen, kann danach aber die Pfade nicht mehr finden, was sich für mich erstmal komisch anhör.
Ich mache mich nochmal schlau. Vielleicht kann hier auch @colinardo helfen.

Grüße
Exze
colinardo
colinardo 24.10.2013 aktualisiert um 21:04:25 Uhr
Goto Top
Hallo Patrick,
das kann so vom Prinzip her nicht funktionieren, denn wenn du einen Übergeordneten Ordner in dem keine 'nodelete.txt' vorhanden ist löschst und die Schleife kommt dann zu einem Unterordner des Ordners den du gerade gelöscht hast findet er diesen natürlich nicht mehr.
Mach es besser so, dass die Mitarbeiter die Ordner welche gelöscht werden sollen mit einer delete.txt markieren. Dann kannst du folgendes Script verwenden:
$rootFolder = "C:\Ordner"  
dir "$rootFolder\delete.txt" -recurse | ?{!($_.PSIsContainer)} | %{Remove-Item $_.DirectoryName -Recurse -Force}  
Grüße Uwe
p.s. du übergibst bei Test-Path das Objekt und nicht den Pfad, wenn schon dann so:
Test-Path -Path "$($b.DirectoryName)\nodelete.txt"