файл — PHP: Как переименовать папки

Я хотел бы попросить вас об одной маленькой вещи.
У меня есть несколько других папок в главной папке.
Эти подпапки называются:

v1, v2, v3, v4 …

Я хотел бы знать, когда я удаляю одну из этих папок,

например v2 -> так что у меня есть v1, v3, v4

как переименовать все эти папки обратно в

v1, v2, v3.

Я попробовал этот код, но он не работает:

$path='directory/';
$handle=opendir($path);
$i = 1;
while (($file = readdir($handle))!==false){
if ($file!="." && $file!=".."){
rename($path . $file, $path . 'v'.$i);
$i++;
}

Спасибо!

3

Решение

Этот код извлекает все каталоги с именами, начинающимися с «v», за которыми следуют цифры.

Каталоги отфильтрованы: v1, v2, v3, …..
Исключены каталоги: v_1, v2_1, v3a, t1,., .., xyz

Окончательные каталоги: v0, v1, v2, v3, …..

Если финальные каталоги должны начинаться с v1, то я снова получу список каталогов и выполню еще один процесс переименования. Надеюсь, это поможет!

$path='main_folder/'; $handle=opendir($path); $i = 1; $j = 0; $foldersStartingWithV = array();

// Folder names starts with v followed by numbers only
// We exclude folders like v5_2, t2, v6a, etc
$pattern = "/^v(\d+?)?$/";

while (($file = readdir($handle))!==false){
preg_match($pattern, $file, $matches, PREG_OFFSET_CAPTURE);

if(count($matches)) {
// store filtered file names into an array
array_push($foldersStartingWithV, $file);
}
}

// Natural order sort the existing folder names
natsort($foldersStartingWithV);

// Loop the existing folder names and rename them to new serialized order
foreach($foldersStartingWithV as $key=>$val) {
// When old folder names equals new folder name, then skip renaming
if($val != "v".$j) {
rename($path.$val, $path."v".$j);
}
$j++;
}
2

Другие решения

Это должно помочь вам; Тем не менее, я предполагаю, что разрешения на сервере правильные, и вы можете переименовать из скрипта:

// Set up directory
$path = "test/";
// Get the sub-directories
$dirs = array_filter(glob($path.'*'), 'is_dir');
// Get a integer set for the loop
$i=0;
// Natural sort of the directories, props to @dinesh
natsort($dirs);

foreach ($dirs as $dir)
{
// Eliminate any other directories, only v[0-9]
if(preg_match('/v.(\d+?)?$/', $dir)
{
// Obtain just the directory name
$file = end(explode("/", $dir));
// Plus one to your integer right before renaming.
$i++;
//Do the rename
rename($path.$file,$path."v".$i);
}
}
1

По вопросам рекламы [email protected]