За последние 24 часа нас посетили 21764 программиста и 1066 роботов. Сейчас ищут 729 программистов ...

Переименование всех файлов в каталоге и подкаталогах

Тема в разделе "Решения, алгоритмы", создана пользователем DemonShan, 12 май 2007.

  1. DemonShan

    DemonShan Активный пользователь

    С нами с:
    12 май 2007
    Сообщения:
    16
    Симпатии:
    0
    Вот скриптик...

    Скрипт переименовываетт все файли с кирилическими названиями... в папке.. и во вложенных папках...

    Листинг 1.
    <?
    set_time_limit(0);
    include ("alfavit.txt");
    echo "
    <html>
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">
    </html>
    ";

    if($act==""){
    echo "Введи путь:<br><form action=\"?act=ren\" method=post name=fr1><input type=text name=dir size=35><input type=text name=pref> - приставка к концу имени файла (до рассщирения)<input type=button value=ОК onclick=\"if(fr1.dir.value){if(confirm('Внимание! Все файлы в папке '+fr1.dir.value+' и во всех вложенных папках будут переименованы.'))fr1.submit();}else alert('Укажите путь');\"></form><br><br>
    Не вздумай вести адрес системных папок))), можешь поколечить систему))....<br>
    Примеры ввода пути:1. C:/папка или C:/папка/. 2. папка или папка/ - в данном случае папка имеется ввиду, что находится там, где и сама программа... 3. также можно ввести ./../папка, ну я думаю это понятно, что папка находится на уровне выше, чем где лежит сама программа...
    ";
    }

    if($act=="ren"){
    echo "<b>Результат выполнения задачи:</b><br>";
    if($dir){
    if(is_dir($dir)){
    $len=strlen($dir);
    if($dir[$len-1]!="/")$dir.="/";
    $arr=listDirToArray($dir);
    array_push($arr, $dir);
    $i=0; $num=0;
    while($arr[$i]){
    $num=renameFiles($arr[$i]);
    $files[0]+=$num[0];
    $files[1]+=$num[1];
    $i++;
    }
    echo "<br>Всего файлов <b>".$files[0]."</b> в <b>$i</b> папках, из них переименовано <b>".$files[1]."</b>.<br></br><a href=\"index.php\">&lt;&lt;Новая задача</a>";
    }else echo "Invalid path";
    }else echo "Invalid path";

    }




    ///////////////////////////////////////////////

    function listDirToArray($dir){
    $dirArray=array();
    if(is_dir($dir)){
    //array_push($dirArray,$dir);
    $d = dir($dir);
    $path=$d->path;
    while ($entry = $d->read()) {
    if(is_dir($path.$entry)){
    if($entry !="." && $entry!=".."){
    $newDir=$path.$entry;
    $len=strlen($newDir);
    if($newDir[$len-1]!="/")$newDir.="/";
    array_push($dirArray, $newDir);
    $tmpAr=listDirToArray($newDir);
    $dirArray=array_merge($dirArray,$tmpAr);
    }
    }
    }
    $d->close();
    }

    return $dirArray;

    }

    function renameFiles($dir){
    global $arCyr, $pref;

    if(is_dir($dir)){
    $d = dir($dir);
    $i[0]=0;$i[1]=0;
    $path=$d->path;
    while ($entry = $d->read()){
    if(is_file($path.$entry)){
    $j=0;
    while($j<=strlen($entry)){
    if(array_key_exists($entry[$j], $arCyr))$strTmp=$arCyr[$entry[$j]];else $strTmp=$entry[$j];
    $strNew.=$strTmp;
    $j++;
    }
    $start=strrpos($strNew, ".");
    if($start === false){
    $strNew.=$pref;
    }else{
    $tmp=substr($strNew,0,$start);
    $ras=substr($strNew,$start+1,strlen($strNew));
    $strNew=$tmp.$pref.".".$ras;
    }
    if(@rename($path.$entry,$path.$strNew))$i[1]++; else echo "<br>Ошибка переименования файла <b>$dir$entry</b> в <b>$dir$strNew</b>. Вероятнее конечный файл уже существует.<br>";
    $strNew="";
    $i[0]++;
    }
    }
    $d->close();

    }else echo "Invalid path";
    return $i;
    }
    ?>

    и сам alfavit.txt

    <?
    $arCyr = array(


    "а"=>"a",
    "б"=>"b",
    "в"=>"v",
    "г"=>"g",
    "д"=>"d",
    "е"=>"e",
    "ё"=>"yo",
    "ж"=>"j",
    "з"=>"z",
    "и"=>"i",
    "к"=>"k",
    "л"=>"l",
    "м"=>"m",
    "н"=>"n",
    "о"=>"o",
    "р"=>"r",
    "с"=>"s",
    "т"=>"t",
    "у"=>"u",
    "ф"=>"f",
    "х"=>"kh",
    "ц"=>"c",
    "ч"=>"ch",
    "ш"=>"sh",
    "щ"=>"csh",
    "ъ"=>"",
    "ы"=>"i",
    "ь"=>"",
    "э"=>"e",
    "ю"=>"yu",
    "я"=>"ya",
    "й"=>"y",
    "п"=>"p",

    "А"=>"A",
    "Б"=>"B",
    "В"=>"V",
    "Г"=>"G",
    "Д"=>"D",
    "Е"=>"E",
    "Ё"=>"YO",
    "Ж"=>"J",
    "З"=>"Z",
    "И"=>"I",
    "К"=>"K",
    "Л"=>"L",
    "М"=>"M",
    "Н"=>"N",
    "О"=>"O",
    "Р"=>"R",
    "С"=>"S",
    "Т"=>"T",
    "У"=>"U",
    "Ф"=>"F",
    "Х"=>"KH",
    "Ц"=>"C",
    "Ч"=>"CH",
    "Ш"=>"SH",
    "Щ"=>"CSH",
    "Ъ"=>"",
    "Ы"=>"I",
    "Ь"=>"",
    "Э"=>"E",
    "Ю"=>"YU",
    "Я"=>"YA",
    "Й"=>"Y",
    "П"=>"P",
    " "=>"_"

    );
    ?>

    может кону набо дудет... меня попросили написать.. на сервере лежит куча мп3 файло (гигометров 500) которые наименованны кирилицей... вот собвственно говорят помогло)))
     
  2. jj

    jj Активный пользователь

    С нами с:
    3 мар 2007
    Сообщения:
    26
    Симпатии:
    0
    абалдеть!
     
  3. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    DemonShan, а что вы имеете против кирилицы??? >8-}
     
  4. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Жестьнах. =)