尝试根据文件大小重命名文件

尝试根据文件大小重命名文件

我正在尝试根据另一个目录中的 mp4 文件大小重命名一些 MP4 文件。我想将所有大小相同的文件命名为相同的名称。这意味着,如果源文件的文件大小与比较目录中的文件大小相匹配,则源文件将重命名为比较文件的名称。因为两个目录都需要递归读取,所以我认为使用 DIR /s /b echo %%~zs>>filesizelist.txt 命令制作一个包含两列信息的列表进行比较会更容易,这样可以得到一个类似这样的列表

123456789 电影.mp4

987654321 电影2.mp4

然后将所有源 mp4 传递给批处理文件,如果 %%~za 与第一列中的值匹配,则将文件转换为相应的文件名。这是最佳路径吗?我尝试编写脚本以即时运行,但这既行不通,也是我 3 天头痛的根源(此外参考列表很少更改,显然很容易更新)。有人可以帮我编写脚本吗?

答案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”,这将在您第一次运行时进行指定的更改。

这是一个非常简单的例子,并没有考虑如何处理具有相同大小的多个文件(可能存在重复文件等),这只涉及父目录而不是递归。

相关内容