2

Привет, я хотел бы переименовать кучу файлов .bin в .oma, исходя из одного условия: первые 4 байта файлов .bin должны содержать строку 'RIFF'. Если оно включает в себя что-то еще, не переименовывайте его.

В настоящее время я использую Windows 7 Pro. Есть ли уже встроенное программное обеспечение для автоматизации, которое я могу использовать?

Мне также нужна эта автоматизация, чтобы потом поменять кучу заголовков mp3 ...

3 ответа3

3

Вы можете добиться этого с помощью следующего скрипта для встроенного 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
            }
        }
    }
}
0

Я не знаю решения "из коробки".

Может быть, написать простой скрипт на Python или Perl, или как вам угодно, это самый простой способ.

0

Хорошо, кто-то должен был опубликовать решение для 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' не нужен, если execs были переупорядочены, удалены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .