Più semplicemente io farei così
edit. Ho provato il tuo codice ma non riscontro il problema di cui parli. Sicuro che l'errore non sia altrove?codice:$files = glob('./file/*.*'); foreach($files as $file) { $name = basename($file); $parts = explode('-',$name); $pref = trim($parts[0]); rename($file,'./file/'.'20'.preg_replace('#(\d{2})_(\d{2})_(\d{2})#','\3_\2_\1',$pref).' -'.$parts[1]); }