
Estou tentando renomear alguns arquivos MP4 com base no tamanho dos arquivos mp4 em outro diretório. Quero nomear todos os arquivos com tamanhos idênticos com o mesmo nome. Ou seja, se o tamanho do arquivo de origem corresponder ao tamanho do arquivo no diretório de comparação, o arquivo de origem será renomeado para qualquer nome do arquivo comparado. Como ambos os diretórios precisam ser lidos recursivamente, acho que seria mais fácil fazer uma lista para comparação com as informações contidas em 2 colunas usando o comando DIR /s /b echo %%~zs>>filesizelist.txt dando me uma lista como
123456789 filme.mp4
987654321 filme2.mp4
Em seguida, passe todos os mp4s de origem para o arquivo em lote e se %%~za corresponder a um valor na primeira coluna, então ren o arquivo para o nome de arquivo correspondente. Este é o melhor caminho? Tentei fazer um script para funcionar em tempo real e isso foi impossível e a fonte da minha dor de cabeça de 3 dias (além disso, a lista de referências raramente muda e é obviamente facilmente atualizada). Alguém pode me ajudar com o roteiro?
Responder1
Por favor, veja o script do PowerShell abaixo.
Eu testei isso apenas em arquivos txt, mas deve funcionar com qualquer arquivo, desde que o tamanho/comprimento do arquivo seja legível.
$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"
}
}
}
Altere os caminhos de $Source e $Comparison para seus respectivos diretórios, atualmente é seguro executar e não fará nenhuma alteração inicialmente. Depois de executá-lo e estar satisfeito com os resultados, você pode remover "-Whatif" da função rename-item e isso fará as alterações especificadas quando você executá-lo pela primeira vez.
Este é um exemplo muito rápido e não leva em consideração como lidar com vários arquivos do mesmo tamanho (possíveis arquivos duplicados etc.), isso faz apenas o diretório pai e não recursivo.