Renomeie todos os arquivos em um diretório para um padrão sequencial

Renomeie todos os arquivos em um diretório para um padrão sequencial

Eu tenho um conjunto de arquivos mp3 em um subdiretório ( mayor) e quero converter cada um deles usando ffmpeg (como este ffmpeg -i <input_file> -ar 44100 -ab 128k -f mp3 <output_file>:), com o arquivo de resultado armazenado em uma pasta irmã mayor_outem um padrão sequencial. Tentei com algumas FORperguntas da pilha, mas ninguém explicou como fazer isso em uma iteração de arquivo/diretório, então faço uma nova pergunta.

Responder1

Bem, consegui fazer isso usando este script .bat (inspirado emesta resposta)

@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

Responder2

O Powershell a seguir deve executar os comandos necessários, ajustar os caminhos conforme necessário:

  1. Crie um arquivo no diretório "pai" (por exemplo, C:\parent\) chamado "ProcessMp3.ps1" e adicione o código abaixo a ele.

    ForEach($i in Get-ChildItem -filter "*.mp3" -Path "C:\parent" ){  
       ffmpeg -i $i -ar 44100 -ab 128k -f mp3 ".\sibling\$i"
    }
    
  2. Crie um diretório chamado "irmão" no diretório pai, por exemplo, "C:\parent\sibling\".

  3. Em um prompt de comando, execute:

    Powershell ./ProcessMp3.ps1
    

Se sequencial significa apenas adicionar 1,2,3, etc. como prefixo ao nome do arquivo, o script pode ter a seguinte aparência:

$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++
}

informação relacionada