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 likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website