
我正在嘗試根據另一個目錄中 mp4 檔案的檔案大小重命名一些 MP4 檔案。我想將所有大小相同的檔案命名為相同的名稱。這意味著如果來源檔案的檔案大小與比較目錄中的檔案大小匹配,則來源檔案將被重新命名為比較檔案的名稱。因為兩個目錄都需要遞歸讀取,所以我認為透過使用 DIR /s /b echo %%~zs>>filesizelist.txt 命令來製作一個列表,以便與兩列中的信息進行比較會更容易我的清單就像
123456789 電影.mp4
987654321 電影2.mp4
然後將所有來源 mp4 傳遞到批次文件,如果 %%~za 與第一列中的值匹配,則將文件指定為相應的文件名。這是最好的道路嗎?我嘗試編寫腳本使其能夠即時運行,但這既是行不通的,也是我三天頭痛的根源(加上參考清單很少改變,而且顯然很容易更新)。有人可以幫我寫腳本嗎?
答案1
請參閱下面的 powershell 腳本。
我僅針對 txt 文件對此進行了測試,但它應該適用於任何文件,前提是文件大小/長度可讀。
$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 的路徑更改為各自的目錄,目前可以安全地運行,並且最初不會進行任何更改。運行它並對結果感到滿意後,您可以從 rename-item 函數中刪除“-Whatif”,這將使您在第一次執行它時指定的變更。
這是一個非常簡單的範例,沒有考慮如何處理具有相同大小的多個檔案(可能的重複檔案等),這僅處理父目錄而不是遞歸。