Попытка переименовать файлы в зависимости от размера файла

Попытка переименовать файлы в зависимости от размера файла

Я пытаюсь переименовать некоторые файлы MP4 на основе размера файлов mp4 в другом каталоге. Я хочу назвать все файлы с одинаковым размером одним и тем же именем. Это означает, что если размер файла исходного файла совпадает с размером файла в каталоге сравнения, исходный файл переименовывается в то имя, которое носит сравниваемый файл. Поскольку оба каталога должны быть прочитаны рекурсивно, я думаю, что было бы проще создать список для сравнения с информацией в нем в 2 столбцах, используя команду DIR /s /b echo %%~zs>>filesizelist.txt, которая даст мне список вроде

123456789 фильм.mp4

987654321 фильм2.mp4

Затем передайте все исходные mp4 в пакетный файл, и если %%~za соответствует значению в первом столбце, то измените файл на соответствующее имя файла. Это лучший путь? Я пытался написать скрипт, чтобы он работал на лету, но это было и неудачей, и источником моей трехдневной головной боли (плюс список ссылок редко меняется и, очевидно, легко обновляется). Может ли кто-нибудь помочь мне со скриптом?

решение1

Пожалуйста, ознакомьтесь с приведенным ниже скриптом PowerShell.

Я тестировал это только на текстовых файлах, но это должно работать с любым файлом, при условии, что размер/длина файла читабельны.

$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"
        }   
    }
}

Измените пути $Source и $Comparison на соответствующие каталоги, в настоящее время это безопасно для запуска и изначально не внесет никаких изменений. После того, как вы запустите его и будете довольны результатами, вы можете удалить "-Whatif" из функции rename-item, и это внесет изменения, указанные при первом запуске.

Это очень быстрый пример, и он не учитывает, как обрабатывать несколько файлов одинакового размера (возможные дубликаты файлов и т. д.), он обрабатывает только родительский каталог и не рекурсивен.

Связанный контент