【问题标题】:PHP: How to rename foldersPHP:如何重命名文件夹
【发布时间】:2016-08-21 19:44:11
【问题描述】:

我想问你一件小事。
我在主文件夹中有几个其他文件夹。 这个子文件夹被命名为:

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++;
    }

谢谢!

【问题讨论】:

  • 用调试器检查 $file 是否是你认为应该有的,或者穷人的调试 echo $file;
  • 此文件夹中的任何其他目录,还是只是 v*?

标签: php file batch-rename


【解决方案1】:

此代码检索名称以“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++;
}

【讨论】:

  • 很高兴natsort()!!
【解决方案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);
    }
}

【讨论】:

    猜你喜欢
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2011-02-08
    • 1970-01-01
    • 2022-10-15
    相关资源
    最近更新 更多