Ursprünglich als Test gedacht, habe ich es zum Umbenennen meiner Mediensammlung eingesetzt. Ein Script zum Auslesen und die Daten in eine CSV-Datei schreiben, ein Script zum Einlesen der geänderten CSV-Datei und umbenennen der Dateien. Dazwischen Excel zur Aufbereitung der Daten. Mit grosser Wahrscheinlichkeit wäre es noch einfacher, schöner und auch effizienter möglich gewesen.
Dateinamen auslesen und aufbereiten

Zeile 4: Es werden alle Dateien (Ordner werden ignoriert) rekursiv aus dem Verzeichnis ausgelesen, das in Zeile 1 gesetzt wurde.
Zeile 15-17: Der Dateinamen wird von der Endung befreit und bei dem Zeichensatz ” – ” getrennt. Die Teilstücke werden im Array $NameParts gespeichert und von überflüssigen Leerzeichen befreit.
Zeile 21-28: Der Array $NameParts wird ausgelesen und in die Eigenschaften der Variable $datacombo geschrieben. Mit Invoke-Expression kann ein Befehl in einer Variable ausgeführt werden, somit besteht die Möglichkeit ein Befehl in Laufzeit zusammen zu setzen.

PowerShell
$FilePath = "Pfad zum Auslesen"

$DataCollection = @()
$Files = Get-ChildItem -Path $FilePath -Recurse | where { !$_.PSIsContainer }

ForEach ($File in $Files) {
    $datacombo = "" | Select "Path", "Size", "NewName", "NP1","NP2","NP3","NP4","NP5","Resolution","Extension"
    $NameParts = @()

    $datacombo.Path = $File.Fullname
    $Size = $File.Length
    $datacombo.Size = $Size/1MB
    $datacombo.Extension = $File.Extension

    $Name = $File.Name -Replace($File.Extension,"")
    $NameParts = $Name -Split" - "
    $NameParts = $NameParts | %{$_.Trim()}

    $i = 1

    ForEach ($Part in $NameParts) {

        If ($Part -eq "720p" -or $Part -eq "1080p" -or $Part -eq "HD") {
            $datacombo.Resolution = $Part
        } Else {
            $temp = '$datacombo.NP'+$i+'=$Part'
            Invoke-Expression $temp
        }
        $i++
    }

    $DataCollection += $datacombo

}

$DataCollection | Export-Csv -Path "Pfad für CSV-Datei" -Encoding "Unicode" -NoTypeInformation</pre>
 

<strong>Dateien umbenennen</strong>

Zeile 3: Um allfälligen Codierungsfehlern aus dem Weg zu gehen, wird der Inhalt der Datei ausgelesen und als Unicode in eine temporäre Datei geschrieben.
<pre class="lang:ps decode:true toolbar:1 scroll:true " title="Dateien umbenennen">$FilePath = "Pfad zur CSV-Datei"

Get-Content $FilePath | Out-File .temp.csv -Encoding Unicode
sleep(5)
$Import = Import-Csv -Path .temp.csv -Delimiter ";"
Remove-Item -Path .temp.csv

$Import | ForEach-Object { 
    $File = Get-ItemProperty -Path $_.Path
    If ($_.NewName -ne $File.Name) {
        Rename-Item -Path $_.Path -NewName $_.NewName
    }
}
Categories: Informatik

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *