BenoitM
Cadet 3rd Year
- Registriert
- März 2012
- Beiträge
- 44
Hello World..
Das folgende Skript dient dem Verpacken von Dateien unter Einhaltung einer maximalen Datenmenge.
Kernproblem beim Ausführen des Skripts liegt darin, dass die $arrList zwar korrekt abgerufen wird, jedoch bei der foreach-Schleife nicht übernommen wird.
Die Verzeichnisstruktur sieht wie folgt aus:
H:\Burst
H:\Burst\RekursivPack\
H:\Burst\RekursivPack\BurstUO1
H:\Burst\RekursivPack\BurstUO2
Beim Ausführen des Skripts werden jedoch nur die PDFs im Ordner BurstUO2 verpackt. Das Skript hiernach einfach beendet.
Seht ihr einen\mehrere\den Fehler?
Das folgende Skript dient dem Verpacken von Dateien unter Einhaltung einer maximalen Datenmenge.
Kernproblem beim Ausführen des Skripts liegt darin, dass die $arrList zwar korrekt abgerufen wird, jedoch bei der foreach-Schleife nicht übernommen wird.
Die Verzeichnisstruktur sieht wie folgt aus:
H:\Burst
H:\Burst\RekursivPack\
H:\Burst\RekursivPack\BurstUO1
H:\Burst\RekursivPack\BurstUO2
Beim Ausführen des Skripts werden jedoch nur die PDFs im Ordner BurstUO2 verpackt. Das Skript hiernach einfach beendet.
Seht ihr einen\mehrere\den Fehler?
Code:
$arrList = Get-ChildItem H:\Burst\RecursivePack -recurse -directory
$arrList
foreach ($element in $arrList)
{
$path = $element.FullName
$list = gci -path $path -Recurse | ? {$_.extension -eq ".pdf"}
$max = 36700160 # 35MB Maximale Verzeichnisgröße
$sum = ($list | measure-object -property length -sum).sum # Summe der Dateigrößen
$runs = 0
}
while ($sum -gt $max)
{
$count = 1 # Zähler
while (($list | select -first $count | measure-object length -sum).sum -lt $max){ # zählt benötigte Dateien für Dateigröße $max
$count++
}
# Definition der neuen Verzeichnisse
$runs++
$splitline = ((($list | select -first 1 ).name) -split "_") # Splite bis zu "_"
$folder = "\" + $splitline[0] +"_" + "{0:D2}" -f $runs +"\" # Anzahl der Stellen beim Serializen
new-item ($path + $folder) -type directory
$list | sort name | select -first $count | move -destination ($path + $folder)
# lese Ordner neu ein
$list = gci -path $path | ? {$_.extension -eq ".pdf"}
$sum = ($list | measure-object -property length -sum).sum
}
if(!($sum -gt $max)){
# verschiebt restliche Dateien
if($runs -gt 0 -and ($list | measure-object).count -ne 0){ # wenn $list nicht leer
if(($list | measure-object -property length -sum).sum -lt 10485760){ #kleiner 10MB > kein neuer Ordner
$folder = "\" + $splitline[0] +"_" + "{0:D2}" -f ($runs) +"\"
$list | move -destination ($path + $folder)
}
else{
$folder = "\" + $splitline[0] +"_" + "{0:D2}" -f ($runs + 1) +"\"
new-item ($path + $folder) -type directory
$list | move -destination ($path + $folder)
}
echo "Dateien fertig verpackt - Skript beendet"
}
}