Script para renombrar ficheros (PHP)
Pues bueno, yo bajo bastante anime, series, etc… y no me gusta tener nombres asquerosos en los ficheros. Debido a esto he tenido que idear un scriptillo para renombrar ficheros en PHP.
Se basa en una expresión regular para encontrar el número del capítulo en cuestión, y a partir de ahí generar un nombre nuevo, limpio y bonito :)
En este ejemplo, se han usado las dos temporadas de Code Geass, donde los ficheros se llamaban “Code_Geass_.1.by_anime_(x-264).mp4″ (vamos, feo de narices) xD
<?php
header(“Content-type: text/plain”);/**
* Parametros a definir:
*
* $dir (Ruta de los ficheros)
* $ereg (Expresion regular para obtener el número del capítulo del nombre del archivo original)
* $finalname (Nombre del archivo final, donde %EREG#X% es el resultado de la expresion regular)
* $extension (Extension de los archivos a renombrar)
* $numzeros (Número de ceros a la izquierda para el número de capítulo (003 = 2))
* $rename (Si realmente queremos renombrarlos o solo hacer una simulacion)
* $extra (Array con por ejemplo los titulos de los capitulos para incluir con %EXTRA%)
**/# Init
$dir = “/media/Almacen/Movies/Code Geass Lelouch of the Rebellion/”;
$ereg = “(R2)*\.([0-9]*)”; // (Ejemplo: nombre_del_capitulo_13.avi)
$finalname = “Code Geass %EREG#1% %EREG#2% – %EXTRA%”;
$extension = “mp4″;
$numzeros = 1;
$rename = false;
$extra =
array(
“El dia en que el diablo nacio”, “El despertar del caballero blanco”, “El falso compañero de clase”,
“Mi nombre es Zero”, “La princesa y la bruja”, “La mascara robada”, “El ataque a cornelia”,
“La orden de los caballeros negros”, “Refrain”, “La danza de Guren”, “La batalla de Narita”,
“El mesaje de Kyoto”, “Shirley y el peligro inminente”, “Geass vs Geass”, “Los aplausos de Mao”,
“Nanally capturada”, “Caballero”, “Una orden para Kururugi Suzaku”, “La isla de Dios”,
“Guerra en Kyuushuu”, “El anuncio del festival escolar”, “Euphie manchada de sangre”,
“Al menos con pena”, “La frase del colapso”, “Zero”,
“El dia que el demonio desperto”, “El plan para liberar Japon”, “La prision en la academia”,
“El contraataque del patibulo”, “Caballero de la Mesa Redonda”, “Ataque sorpresa en el Oceano Pacifico”,
“La mascara abandonada”, “El milagro de millones”, “La novia del Zhu Jin Cheng”,
“Cuando el Shen Hum resplandece”, “El poder de los sentimientos”, “Ataque de amor”,
“Un asesino del pasado”, “La caceria de Geass”, “El mundo de C”,
“La primera revolucion de la Unidad de Naciones”, “El sabor de la tierra”,
“La segunda batalla decisiva de Tokio”, “Traicion”, “Inadecuado para ser emperador”,
“La conexion Ragnarok”, “El emperador Lelouch”, “La mascara de Schneizel”,
“Sky of Damocles”, “Re”
);# Comienza el renombrado
if ($gestor = opendir($dir))
{
# Obtenemos los ficheros y los metemos en un array
while (false !== ($archivo = readdir($gestor)))
{
$allfiles[] = $archivo;
}closedir($gestor);
}# Init de contador de ficheros
$numFiles = 0;# Ordenamos el array de forma natural
natsort($allfiles);# Recorremos los ficheros
foreach ($allfiles as $archivo)
{
if ($archivo != “.” && $archivo != “..” && $archivo != “renamer.php”)
{
# Init
$farchivo = null;# Obtenemos la extension
$ext = strtolower(substr($archivo, strrpos($archivo, “.”)));if ($extension && substr($ext, 1) != $extension) continue;
# Obtenemos la Expresion regular
if (eregi($ereg, $archivo, $regs))
{
$farchivo = $finalname;# Obtenemos el nombre del fichero a cambiar
for ($i = 1; $i < count($regs); $i++)
{
if ($regs[$i])
{
if (is_numeric($regs[$i])) {
$remplace = str_pad($regs[$i], $numzeros + 1, “0″, STR_PAD_LEFT);
}
else {
$remplace = $regs[$i];
}$farchivo = str_replace(“%EREG#{$i}%”, $remplace, $farchivo);
}
}# Remplazamos el extra
if (count($extra) && $extra[$numFiles])
{
$farchivo = str_replace(“%EXTRA%”, $extra[$numFiles], $farchivo);
}
else
{
$farchivo = str_replace(“%EXTRA%”, “”, $farchivo);
}# Eliminamos los %EREG#x% que quedan
$farchivo = preg_replace(“/%EREG#[0-9]*%/i”, “”, $farchivo);# Eliminamos dobles espacios
$farchivo = preg_replace(“/[ ]{2,99}/i”, ” “, $farchivo);# Añadimos la extension
$farchivo .= $ext;# Salida
if ($farchivo)
{
echo “>> \”{$archivo}\” <<##>> \”{$farchivo}\”\n”;if ($rename)
{
rename(“{$dir}{$archivo}”, “{$dir}{$farchivo}”);
}
}
else
{
echo “** No se pudo cambiar el nombre de {$archivo}\n”;
}$numFiles++;
}
}
}?>
Espero que os sirva.
.
Ya se que es un post antiguo, pero en vez de eso usa filemenutools (www.lopesoft.com) que te añade opciones al menú del botón derecho del ratón y tiene renombrado masivo (de carpetas, archivos, …) e incluso tiene regexp.
^_^
Gracias por la info, aunque das por hecho que utilizo windows y ahi ha fallao el tema :)
De todas formas, se agradece el aporte.
Saludos!!!!