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
}

Uwe

Uwe Ziegenhagen mag LaTeX und Python, auch gern in Kombination. Hat Dir dieser Beitrag geholfen und möchtest Du Dich dafür bedanken? Dann unterstütze doch vielleicht die Dingfabrik Köln e.V. mit einem kleinen Beitrag. Details zur Bezahlung findest Du unter Spenden für die Dingfabrik.

More Posts - Website