PHP使用子目录重命名所有文件作为新文件名

时间:2014-10-28 14:00:38

标签: php batch-rename

如何在下面重命名此文件?

/Categories
|  /Celebrities
|  |  /Alyssa Milano
|  |  |  1.jpg
|  |  |  2.jpg
|  |  |  3.jpg
|  |  |  4.jpg
|  |  |  5.jpg
|  |  /Britney Spears
|  |  |  1.jpg
|  |  |  2.jpg
|  |  |  3.jpg
|  |  |  4.jpg
|  |  |  5.jpg
|  /Singers
|  |  /Rihanna
|  |  |  1.jpg
|  |  |  2.jpg
|  |  |  3.jpg
|  |  |  4.jpg
|  |  |  5.jpg
|  |  /Katy Perry
|  |  |  1.jpg
|  |  |  2.jpg
|  |  |  3.jpg
|  |  |  4.jpg
|  |  |  5.jpg

我想重命名 1.jpg 2.jpg 3.jpg 4.jpg 5.jpg

Alyssa Milano - 1.jpg,Alyssa Milano - 2.jpg,Alyssa Milano - 3.jpg

Britney Spears - 1.jpg,Britney Spears - 2.jpg,Britney Spears - 3.jpg

蕾哈娜 - 1.jpg,蕾哈娜 - 2.jpg,蕾哈娜 - 3.jpg

Katy Perry - 1.jpg,Katy Perry - 2.jpg,Katy Perry - 3.jpg

您好@GusDB,

我将代码更改为以下内容,但没有任何反应

<?php
/**
 * Created by Gus de Boer
 * 28-10-2014
 * Stackoverflow
 */

function scanParentDir(){
    $categories = scandir('categories ');
    foreach($categories as $cat){
        if(file_exists('categories /'.$cat) && $cat != '.' && $cat != '..'){
            changesNamesToSubParentDir($cat);
        }
    }
}

function changesNamesToSubParentDir($cat){
    $albums = scandir('categories /'.$cat);
    foreach($albums as $album){
        if(file_exists('categories /'.$cat.'/'.$album) && $album != '.' && $album != '..'){
            changesNamesToParentDir($album);
        }
    }
}

function changesNamesToParentDir($album){
    $files = scandir('categories /'.$cat.'/'.$album);
    foreach($files as $file){
        if(file_exists('categories /'.$cat.'/'.$album.'/'.$file) && $file != '.' && $file != '..'){
            $filename = pathinfo('categories /'.$cat.'/'.$album.'/'.$file);
            rename('categories /'.$cat.'/'.$album.'/'.$file,     'categories /'.$cat.'/'.$album.'/'.$album.$filename['basename']);
        }
    }
}
?>

非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用scandir()(http://php.net/manual/en/function.scandir.php)获取“Celebrities”目录中每个目录的数组。

scandir('path-to-directory');

这将生成一个包含所有目录的数组。在此之后,您可以遍历它,并为所有图像再次执行scandir()。

您可以使用rename()(http://nl3.php.net/manual/en/function.rename.php

重命名文件
rename('path-to-file<oldname>', 'path-to-file<newname>');

您应该先尝试编码并稍后提问。还提供您已经尝试过的代码示例。

我希望这对你有用!

修改

这些功能可以帮到你。这只是基本的重命名,你应该添加更多的检查和内容。

<?php
/**
 * Created by Gus de Boer
 * 28-10-2014
 * Stackoverflow
 */

function scanParentDir(){
    $directories = scandir('Categories/Celebrities');
    foreach($directories as $dir){
        if(file_exists('Categories/Celebrities/'.$dir) && $dir != '.' && $dir != '..'){
            changesNamesToParentDir($dir);
        }
    }
}

function changesNamesToParentDir($dir){
    $files = scandir('Categories/Celebrities/'.$dir);
    foreach($files as $file){
        if(file_exists('Categories/Celebrities/'.$dir.'/'.$file) && $file != '.' && $file != '..'){
            $filename = pathinfo('Categories/Celebrities/'.$dir.'/'.$file);
            rename('Categories/Celebrities/'.$dir.'/'.$file,     'Categories/Celebrities/'.$dir.'/'.$dir.$filename['basename']);
        }
    }
}
?>