2014-10-28 160 views
0

如何在下面重命名此文件?PHP将所有使用子目录的文件重命名为新文件名

/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.JPG2.JPG3.JPG4.JPG5.JPG

贾静雯米兰 - 1。 jpg,Alyssa Milano - 2.jpg,Alyssa Milano - 3.jpg

Britney Spears - 1.jpg,布兰妮斯皮尔斯 - 2.jpg,布兰妮斯皮尔斯 - 3.jpg

蕾哈娜 - 1.JPG,蕾哈娜 - 2.JPG,蕾哈娜(Rihanna) - 3.JPG

凯蒂·佩里 - 1.JPG,凯蒂·佩里 - 2.JPG,凯蒂·佩里 - 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

书写代码将是一个好的开始。你到目前为止尝试过什么? – 2014-10-28 14:07:26

回答

0

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

scandir('path-to-directory'); 

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

您可以重命名重命名()的文件(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']); 
     } 
    } 
} 
?> 
+0

喜GusDB 希望你能帮助我固定 – Anwar 2014-10-28 16:40:39

+0

我为您创造 – 2014-10-28 18:42:49

+0

嗨@GusDB工作功能, 您可以查看回我的问题? 我改变你的代码,但注意到发生:( – Anwar 2014-10-29 02:15:14

相关问题