Mit Powershell Verzeichnisstrukturen prüfen
Ich habe in meiner Dateiablage ein bestimmtes Namensschema, nach dem nur bestimmte Ordnernamen für Unterordner zulässig sind und außerhalb dieser Unterordner keine Dateien liegen sollen. Die folgenden Skripte helfen dabei, Abweichungen vom Schema zu finden.
Skript No. 1 sucht sich alle Ordner in der Struktur und prüft dann für jeden Ordner, ob er entweder „allowedfoldername1“ oder „allowedfoldername2“ heißt. Abweichungen davon werden mit ihrem kompletten Pfad ausgegeben.
cd "d:\Structure" $folders = gci | ? {$_.PSisContainer -eq $true} foreach ($i in $folders){ cd $path cd $i $subfolders = gci | ? {$_.PSisContainer -eq $true} foreach ($j in $subfolders){ if ($j.name -ne "allowedfoldername1" -and $j.name -ne "allowedfoldername2"){ $j.fullname } } } |
Zusätzlich möchte ich prüfen, ob auch in jedem Ordner die beiden Unterordner „allowedfoldername1“ und „allowedfoldername2“ vorhanden sind. Dies geschieht in folgendem Skript mittels testpath
, die Ergebnisse werden in einer CSV-Datei gespeichert.
cd "d:\structure" $folders = gci | ? {$_.PSisContainer -eq $true} foreach ($i in $folders){ cd $path cd $i if (!(Test-Path -path 'allowedfoldername1')){ "allowedfoldername1 does not exist in `t$i" | Out-File "c:\structures-20110721.csv" -Append -Width 270 } if (!(Test-Path -path 'allowedfoldername2')){ "allowedfoldername2 does not exist in `t$i" | Out-File "c:\structures-20110721.csv" -Append -Width 270 } } |
Ordnernamen, die nicht richtig benannt wurden, können auch einfach umbenannt werden:
Clear-History Clear-Host cd "c:\somefolder" $subfolderold='oldname' $subfoldernew='newname' $folders = gci | ? {$_.PSisContainer -eq $true} foreach ($i in $folders){ cd $path\$i if ((Test-Path -path $subfolderold)){ rename-item -path $subfolderold -newname $subfoldernew } } |
Final kann noch geprüft werden, ob es Dateien gibt, die nicht in einem der beiden Unterordner, sondern im jeweiligen Ordner selbst liegen.
Clear-History Clear-Host cd "d:\structure" $folders = gci foreach ($fund in $folders){ gci $fund | ? {$_.PSisContainer -eq $false} | Select Fullname | Out-File "c:\lonely-fund-files-20110721" -Append -Width 280 } |