根据条件重命名多个文件扩展名

根据条件重命名多个文件扩展名

您好,我想根据一个条件将一组 .bin 文件重命名为 .oma:.bin 文件的前 4 个字节应该包含字符串“RIFF”。如果它包含其他内容,则不要重命名。

我目前正在使用 Windows 7 Pro。是否有内置的自动化软件可供我使用?

我以后也需要这种自动化功能来更改一堆 mp3 标题...

答案1

您可以使用以下内置 Windows Powershell 脚本实现此目的:

$files = get-childitem | where {$_.extension -eq '.bin'}

foreach ($f in $files)
{
    try
    {
        $reader = $f.Open([System.IO.FileMode]::Open)
        $bytes = new-object byte[] 4
        $numRead = $reader.Read($bytes, 0, $bytes.Count)
    }
    finally
    {
        if ($reader)
        {
            $reader.Dispose()
        }

        if ($numRead -eq 4)
        {
            $encoding = new-object "System.Text.ASCIIEncoding"
            if ($encoding.GetString($bytes) -eq "RIFF")
            {
                $newname = $f.Name.Replace(".bin", ".oma")
                rename-item $f -newname $newname
            }
        }
    }
}

答案2

我不知道“开箱即用”的解决方案。

也许用 python 或 perl 或者任何你喜欢的方式编写简单的脚本是最简单的方法。

答案3

好吧,有人必须发布一个 bash 解决方案。

find . -name '*.bin' -exec head -q -c 4 {} \; -exec printf ' %s' {} \; -exec printf '\n' \;  | grep RIFF | cut -d' ' -f2- | tr "\n" "\0" | xargs -0 rename -v 's/\.bin/\.oma/'

更新:

  1. 支持带空格的文件名
  2. 意识到如果对高管进行重新排序、移除,‘rev’技巧就是不必要的。

相关内容