
Estoy intentando cambiar el nombre de algunos archivos MP4 según el tamaño de los archivos mp4 en otro directorio. Quiero nombrar todos los archivos con tamaños idénticos con el mismo nombre. Es decir, si el tamaño del archivo fuente coincide con el tamaño del archivo en el directorio de comparación, el nombre del archivo fuente cambia al nombre del archivo comparado. Debido a que ambos directorios deben leerse de forma recursiva, creo que sería más fácil hacer una lista para comparar con la información que contiene en 2 columnas usando el comando DIR /s /b echo %%~zs>>filesizelist.txt. yo una lista como
123456789 película.mp4
987654321 película2.mp4
Luego, pase todos los mp4 de origen al archivo por lotes y, si %%~za coincide con un valor en la primera columna, ejecute el archivo con el nombre de archivo correspondiente. ¿Es este el mejor camino? Intenté programarlo para que funcionara sobre la marcha y eso fue a la vez un fracaso y la fuente de mi dolor de cabeza de 3 días (además, la lista de referencias rara vez cambia y obviamente se actualiza fácilmente). ¿Alguien puede ayudarme con el guión?
Respuesta1
Consulte el siguiente script de PowerShell.
He probado esto solo con archivos txt, pero debería funcionar con cualquier archivo siempre que el tamaño/longitud del archivo sea legible.
$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"
}
}
}
Cambie las rutas de $Source y $Comparison a sus respectivos directorios. Actualmente, esto es seguro de ejecutar y no realizará ningún cambio inicialmente. Una vez que lo haya ejecutado y esté satisfecho con los resultados, puede eliminar "-Whatif" de la función de cambio de nombre del elemento y esto realizará los cambios especificados cuando lo ejecute por primera vez.
Este es un ejemplo muy rápido y no toma en consideración cómo manejar múltiples archivos con el mismo tamaño (posibles archivos duplicados, etc.), esto solo tiene en cuenta el directorio principal y no es recursivo.