Разбор имени файла, переименование файла, затем перемещение в другой каталог

#php #directory #filenames

#php #каталог #имена файлов

Вопрос:

У меня есть папка, содержащая файлы с такими именами: MDalarm_20201129_061408.mkv

Я должен переименовать их все следующим образом: dd_mm_yy_hhss.mkv, а затем переместить их в каталог на основе их даты. пример: MDalarm_20201129_061408.mkv станет:

29_11_20_0614.mkv и будет перемещен в папку 29_11_20

 $year = date("Y");
$month = date("m");
$day = date("d");
 
$directory = "$day_$month_$year";


if(!is_dir($directory))
{
    mkdir($directory, 755, true);
}

error_reporting(0);
$video=array();
$path= 'record';
$video=glob("$path/*.mkv");
$quanti=count($video);

foreach($video as $chiave => $nome)

{       
        $componenti=explode("_", $nome);
 }
 

Комментарии:

1. Можете ли вы поделиться с нами своими усилиями?

2. И какой у вас вопрос по этому поводу?

3. Ваша попытка кодирования, похоже, не соответствует изложенным вами требованиям. Трудно понять, где вы застряли.

4. Просто перебирайте файлы. Во время цикла просто проверьте, существует ли ваш каталог (вы уже это делаете, но это должно происходить в цикле), используйте регулярное выражение для определения даты (здесь вам не нужно использовать регулярное выражение, есть много способов сделать это, особенно если у вас есть формат) и, наконец, переименуйтефайл . Если у вас есть конкретная проблема, вернитесь сюда и спросите.

5. не так, чтобы рекурсивно читать и переименовывать все файлы

Ответ №1:

Вот скрипт для этого. Я попробовал это на своей Windows 10, и здесь он работает хорошо

Редактировать: теперь вам просто нужно изменить переменную расширения, и она обработает ее нормально

 <?php 

$extension = "mkv";
$allFiles = glob("*.".$extension);

foreach($allFiles as $filename){
    $getYearDayMonth = getYearDayMonth($filename);
    if (!file_exists($getYearDayMonth)) {
        mkdir($getYearDayMonth, 0777, true);
    }
    $hhss = "";
    preg_match("/.*_(dddddd)./",$filename,$hhss);
    $hhss = $hhss[1];
    file_put_contents($getYearDayMonth."/".$getYearDayMonth."_".$hhss.".".$extension,file_get_contents($filename));
}

function getYearDayMonth($filename){
    $getYearDayMonth = "";
    $getYear = "";
    $getMonth = "";
    $getDay =  "";
    preg_match("/MDalarm_(. ?)_/",$filename,$getYearDayMonth);
    $getYearDayMonth = $getYearDayMonth[1];
    preg_match("/dddd/",$getYearDayMonth,$getYear);
    $getYear = $getYear[0];
    preg_match("/dddd(dd)/",$getYearDayMonth,$getMonth);
    $getMonth = $getMonth[1];
    preg_match("/dddddd(dd)/",$getYearDayMonth,$getDay);
    $getDay = $getDay[1];

    return $getYear."_".$getMonth."_".$getDay;
}


?>