Versuch, Dateien basierend auf der Dateigröße umzubenennen

Versuch, Dateien basierend auf der Dateigröße umzubenennen

Ich versuche, einige MP4-Dateien basierend auf der Dateigröße von MP4-Dateien in einem anderen Verzeichnis umzubenennen. Ich möchte allen Dateien mit identischer Größe denselben Namen geben. Das bedeutet, wenn die Dateigröße der Quelldatei mit der Größe der Datei im Vergleichsverzeichnis übereinstimmt, wird die Quelldatei in den Namen der verglichenen Datei umbenannt. Da beide Verzeichnisse rekursiv gelesen werden müssen, denke ich, dass es einfacher wäre, eine Liste zum Vergleich mit den darin enthaltenen Informationen in zwei Spalten zu erstellen, indem ich den Befehl DIR /s /b echo %%~zs>>filesizelist.txt verwende, der mir eine Liste wie diese gibt

123456789 Film.mp4

987654321 Film2.mp4

Übergeben Sie dann alle Quell-MP4s an die Batchdatei und wenn %%~za mit einem Wert in der ersten Spalte übereinstimmt, geben Sie der Datei den entsprechenden Dateinamen. Ist das der beste Weg? Ich habe versucht, es per Skript so zu programmieren, dass es sofort funktioniert, aber das war nicht möglich und die Ursache für meine dreitägigen Kopfschmerzen (außerdem ändert sich die Referenzliste selten und lässt sich offensichtlich leicht aktualisieren). Kann mir bitte jemand mit dem Skript helfen?

Antwort1

Bitte sehen Sie sich das folgende Powershell-Skript an.

Ich habe dies nur mit TXT-Dateien getestet, aber es sollte mit jeder Datei funktionieren, vorausgesetzt, die Dateigröße/-länge ist lesbar.

$Source = "C:\Test"
$Comparison = "C:\Test2"

$SourceFiles = Get-ChildItem -File -Path $Source | Select *
$ComparisonFiles = Get-ChildItem -File -Path $Comparison | Select *

Foreach ($File in $SourceFiles){
    Write-Host "Checking for" $File.Name
    Foreach ($CFile in $ComparisonFiles){
        if ($File.length -eq $CFile.length){
            Write-host $File.fullname "Matches `n" $CFile.fullname
            Rename-Item -Path $File.FullName -NewName $CFile.Name -WhatIf
            Write-Host "`n"
        }   
    }
}

Ändern Sie die Pfade von $Source und $Comparison in die entsprechenden Verzeichnisse. Dies kann derzeit sicher ausgeführt werden und nimmt zunächst keine Änderungen vor. Sobald Sie es ausgeführt haben und mit den Ergebnissen zufrieden sind, können Sie „-Whatif“ aus der Funktion „rename-item“ entfernen. Dadurch werden die beim ersten Ausführen angegebenen Änderungen vorgenommen.

Dies ist ein sehr kurzes Beispiel und berücksichtigt nicht, wie mehrere Dateien mit der gleichen Größe (mögliche doppelte Dateien usw.) verarbeitet werden. Es wird nur das übergeordnete Verzeichnis behandelt, es ist nicht rekursiv.

verwandte Informationen