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

0

Eu tenho um conjunto de arquivos mp3 em um subdiretório ( mayor ), e eu quero converter cada um usando ffmpeg (assim: ffmpeg -i <input_file> -ar 44100 -ab 128k -f mp3 <output_file> ), com o arquivo de resultados armazenado em uma pasta de irmãos mayor_out em um padrão seqüencial. Eu tentei com algumas perguntas de FOR da pilha, mas ninguém explicou como fazer isso em uma iteração de arquivo / diretório, então eu faço uma nova pergunta.

    
por Vico 19.03.2017 / 23:50

2 respostas

0

Bem, eu consegui fazer isso usando este script .bat (inspirado por esta 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
    
por 20.03.2017 / 00:24
0

O Powershell a seguir deve executar os comandos necessários, ajustar 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 um 1,2,3, etc como um prefixo ao nome do arquivo, o script pode ter esta 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++
}
    
por 20.03.2017 / 00:10