Переименуйте все файлы в каталоге в последовательный порядок по умолчанию.

Переименуйте все файлы в каталоге в последовательный порядок по умолчанию.

У меня есть набор файлов mp3 в подкаталоге ( mayor), и я хочу преобразовать каждый из них с помощью ffmpeg (вроде этого: ffmpeg -i <input_file> -ar 44100 -ab 128k -f mp3 <output_file>), с сохранением файла результата в папке-брате mayor_outв последовательном шаблоне. Я пробовал с некоторыми вопросами стека FOR, но никто не объяснил, как сделать это в итерации файла/каталога, поэтому я задаю новый вопрос.

решение1

Ну, мне удалось сделать это с помощью этого .bat-скрипта (вдохновленногоэтот ответ)

@echo off
cd /D mayor
set _num=1
FOR /R %%X IN (*.mp3) DO call :body %%X
goto :eof

:body
ffmpeg -i %1 -ar 44100 -ab 128k -f mp3 ../mayor_out/YAL_m%_num%.mp3
set /a "_num=_num+1"
goto :eof
pause

решение2

Следующая оболочка Powershell должна выполнить необходимые вам команды, при необходимости измените пути:

  1. Создайте файл в «родительском» каталоге (например, C:\parent\) с именем «ProcessMp3.ps1» и добавьте в него приведенный ниже код.

    ForEach($i in Get-ChildItem -filter "*.mp3" -Path "C:\parent" ){  
       ffmpeg -i $i -ar 44100 -ab 128k -f mp3 ".\sibling\$i"
    }
    
  2. Создайте каталог с именем «sibling» в родительском каталоге, например «C:\parent\sibling\".

  3. В командной строке выполните:

    Powershell ./ProcessMp3.ps1
    

Если последовательный означает просто добавление 1,2,3 и т.д. в качестве префикса к имени файла, то скрипт может выглядеть следующим образом:

$c=1
ForEach($i in Get-ChildItem  -filter "*.mp3" -Path "C:\parent" ){  
  ffmpeg -i $i -ar 44100 -ab 128k -f mp3 ".\sib\$c-$i"
  $c++
}

Связанный контент