Der Versuch, Dateien basierend auf der Dateigröße umzubenennen

417
DeAnthony

Ich versuche, einige MP4-Dateien basierend auf der Dateigröße von MP4-Dateien in einem anderen Verzeichnis umzubenennen. Ich möchte, dass alle Dateien mit identischen Größen denselben Namen haben. Das heißt, wenn die Dateigröße der Quelldatei der Dateigröße im Vergleichsverzeichnis entspricht, 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 Informationen in 2 Spalten zu erstellen, indem der Befehl DIR / s / b echo %% ~ zs >> filesizelist.txt verwendet wird mir eine Liste gefällt

123456789 movie.mp4

987654321 movie2.mp4

Übergeben Sie dann alle Quell-MP4-Dateien an die Stapeldatei. Wenn %% ~ za mit einem Wert in der ersten Spalte übereinstimmt, müssen Sie die Datei in den entsprechenden Dateinamen umbenennen. Ist das der beste Weg? Ich habe versucht, ein Skript zu erstellen, um schnell zu arbeiten, und das war sowohl ein No-Go als auch die Ursache für meine 3-tägigen Kopfschmerzen (plus der Referenzliste ändert sich selten und ist offensichtlich leicht zu aktualisieren). Kann mir bitte jemand beim Skript helfen?

0
Hast du über Powershell nachgedacht? Obwohl ich sehen kann, dass dies per Batch möglich sein sollte, denke ich immer noch, dass Powershell weniger Arbeit bedeutet und mit zukünftigen Möglichkeiten genau das schafft, was Sie möchten. CraftyB vor 6 Jahren 0
Danke für die schnelle Antwort. Ich habe über Powershell nachgedacht, aber ich bin damit überhaupt nicht vertraut. Ich kann verstehen, aber nach welchen Befehlen sollte ich forschen, um das Skript zu schreiben? DeAnthony vor 6 Jahren 0

1 Antwort auf die Frage

0
CraftyB

Bitte sehen Sie sich das folgende Powershell-Skript an.

Ich habe dies nur mit txt-Dateien getestet, sollte jedoch 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 den Pfad von $ Source und $ Comparison in die entsprechenden Verzeichnisse. Dies ist derzeit sicher ausgeführt 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 Umbenennungsfunktion entfernen. Dadurch werden die beim ersten Ausführen angegebenen Änderungen vorgenommen.

Dies ist ein sehr schnelles Beispiel, bei dem nicht berücksichtigt wird, wie mehrere Dateien mit der gleichen Größe behandelt werden sollen (möglicherweise doppelte Dateien usw.). Dies gilt nur für das übergeordnete Verzeichnis und nicht für rekursiv.

Vielen Dank. Ich werde es testen und berichten, sobald ich Kraft bekomme, seit der Hurrikan meine besiegt hat. Ich denke, ich kann etwas über Powershell nachlesen, um es rekursiv zu machen. Danke für den Kickstart! DeAnthony vor 6 Jahren 0
Funktioniert perfekt! Tausend Dank! Nach ein paar kurzen Nachforschungen fügte ich hinzu - nach dem $ source- und $ -Vergleich rekursieren, um alle meine Ziele zu erreichen (für alle, die diese Frage mit ähnlichen Zielen lesen). Ich denke, Klammern haben es vielleicht gebrochen, da es an zwei Dateien fehlgeschlagen ist, aber sobald ich [Mist] aus dem Dateinamen gelöscht habe, wurde es einwandfrei ausgeführt. Ich kann das manuell beheben, aber ich denke, ich werde noch mehr Powershell-Forschung betreiben, um den Täter zu finden. Elegantes einfaches Skript, das Sie geschrieben haben. Danke noch einmal! DeAnthony vor 6 Jahren 0