PowerShell: Inhalte der Mergeordner abstimmen

7. Oktober 2015 11:32

Falls Mergeordner wie ORIGINAL, MODIFIED usw. überflüssige Dateien enthalten, kann man diese mit diesen Funktionen entrümpeln.

Ein Ordner gibt dabei die benötigten Objekte vor (im Beispiel 1 der ORIGINAL), der andere (MODIFIED) wird durchlaufen und Dateien, die keinen Namensvetter im anderen Ordner haben, werden gelöscht.

Anwendungsbeispiel: Ordner MODIFIED enthält einen kompletten Objektexport, ORIGINAL nur die zu mergenden Objekte. Nach Anwendung des Skripts blieben auch diese nur noch im MODIFIED-Ordner über, der restliche Ballast ist dann entfernt.

:greenarrow: Vor dem Aufruf der jeweiligen Funktion in der PowerShell in den Pfad wechseln, der die Mergeordner enthält.

Code:
function DeleteNonMatchingFilesInMODIFIED
{
$files = Get-ChildItem ".\MODIFIED"

for ($i=0; $i -lt $files.Count; $i++)
{
$FullFileName = $files[$i].FullName
$FileName = Split-path $files[$i] -Leaf

$ORIGFile = ".\ORIGINAL\$fileName"
if (-not(Test-Path $ORIGFile))
    {Remove-Item $Fullfilename -force -Verbose}

}
}


MergeOrdnerabgleichen.png


Beispiel 2: Hier wird ORIGINAL durchlaufen und dort die im Ordner MODIFIED nicht vorhandenen Dateinamen gelöscht.
Code:
function DeleteNonMatchingFilesInORIGINAL
{
$files = Get-ChildItem ".\ORIGINAL"

for ($i=0; $i -lt $files.Count; $i++)
{
$FullFileName = $files[$i].FullName
$FileName = Split-path $files[$i] -Leaf

$MODIFile = ".\MODIFIED\$fileName"
if (-not(Test-Path $MODIFile))
    {Remove-Item $Fullfilename -force -Verbose}

}
}

Beispiel 3: Hier wird MODIFIED durchlaufen und dort die im Ordner TARGET nicht vorhandenen Dateinamen gelöscht.
Code:
function DeleteNonMatchingFilesInMODIFIEDComparedWithTARGET
{
$files = Get-ChildItem ".\MODIFIED"

for ($i=0; $i -lt $files.Count; $i++)
{
$FullFileName = $files[$i].FullName
$FileName = Split-path $files[$i] -Leaf

$TARGFile = ".\TARGET\$fileName"
if (-not(Test-Path $TARGFile))
    {Remove-Item $Fullfilename -force -Verbose}

}
}


Dazu ein kleiner Tipp am Rande:
Den aktuellen Powershell-Pfad als Explorerfenster öffnen geht am schnellsten über den Alias ii des Cmdlets Invoke-Item, gefolgt von Leerzeichen und Punkt.
Code:
ii .

Für andere Ordner den Punkt durch den benötigten Pfad ersetzen.
Code:
ii c:\temp
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.