Cambie el nombre de todos los archivos en un directorio a un valor predeterminado secuencial

Cambie el nombre de todos los archivos en un directorio a un valor predeterminado secuencial

Tengo un conjunto de archivos mp3 en un subdirectorio ( mayor), y quiero convertir cada uno usando ffmpeg (como este ffmpeg -i <input_file> -ar 44100 -ab 128k -f mp3 <output_file>:), con el archivo de resultados almacenado en una carpeta hermana mayor_outen un patrón secuencial. Intenté con algunas FORpreguntas de la pila, pero nadie explicó cómo hacerlo en una iteración de archivo/directorio, así que hago una nueva pregunta.

Respuesta1

Bueno, logré hacer esto usando este script .bat (inspirado enesta respuesta)

@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

Respuesta2

El siguiente Powershell debería ejecutar los comandos que necesita y ajustar las rutas según sea necesario:

  1. Cree un archivo en el directorio "principal" (por ejemplo, C:\parent\) llamado "ProcessMp3.ps1" y agréguele el siguiente código.

    ForEach($i in Get-ChildItem -filter "*.mp3" -Path "C:\parent" ){  
       ffmpeg -i $i -ar 44100 -ab 128k -f mp3 ".\sibling\$i"
    }
    
  2. Cree un directorio llamado "hermano" en el directorio principal, por ejemplo, "C:\parent\sibling\".

  3. En un símbolo del sistema, ejecute:

    Powershell ./ProcessMp3.ps1
    

Si secuencial solo significa agregar 1,2,3, etc. como prefijo al nombre del archivo, entonces el script podría verse así:

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

información relacionada