
Я пытаюсь переименовать некоторые файлы 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, и это внесет изменения, указанные при первом запуске.
Это очень быстрый пример, и он не учитывает, как обрабатывать несколько файлов одинакового размера (возможные дубликаты файлов и т. д.), он обрабатывает только родительский каталог и не рекурсивен.