用PHP重命名文件?

时间:2016-09-27 06:27:10

标签: php

我希望脚本进入文件夹' images',取出每个文件,剪切前四个字符并重命名。

PHP

<?php
$path = './images/';

if ($handle = opendir($path))
{
    while (false !== ($fileName = readdir($handle)))
    {
        if($fileName!=".." && $fileName!=".")
        {
            $newName = substr($fileName, 4);
            $fileName = $path . $fileName;
            $newName = $path . $newName;

            rename($fileName, $newName);
        }
    }

    closedir($handle);
}
?>

这是images文件夹中文件的命名方式:

0,78test-1.jpg
0,32test-2.jpg
0,43test-3.jpg
0,99test-4.jpg

这就是我希望它们的样子:

test-1.jpg
test-2.jpg
test-3.jpg
test-4.jpg

问题是脚本会删除前8个,12个或16个字符,而不是我想要的四个字符!因此,当我执行它时,我的文件看起来像这样:

-1.jpg
-2.jpg
-3.jpg
-4.jpg

更新

我还跟踪了包,以确保我没有多次执行脚本。该脚本只执行一次!

3 个答案:

答案 0 :(得分:1)

稍微不同的方法虽然与substr部分基本相同,但这对本地系统的测试工作正常。

$dir='c:/temp2/tmpimgs/';
$files=glob( $dir . '*.*' );
$files=preg_grep( '@(\.jpg$|\.jpeg$|\.png$)@i', $files );


foreach( $files as $filename ){
    try{

        $path=pathinfo( $filename, PATHINFO_DIRNAME );
        $name=pathinfo( $filename, PATHINFO_BASENAME );
        $newname=$path . DIRECTORY_SEPARATOR . substr( $name, 4, strlen( $name ) );

        if( strlen( $filename ) > 4 ) rename( $filename, $newname );

    } catch( Exception $e ){
        echo $e->getTraceAsString();
    }
}

答案 1 :(得分:0)

您可能想尝试这个小功能。它会为你正确地重命名:

<?php

    $path   = './images/';

    function renameFilesInDir($dir){
        $files   = scandir($dir);

        // LOOP THROUGH THE FILES AND RENAME THEM
        // APPROPRIATELY...
        foreach($files as $key=>$file){
            $fileName   = $dir . DIRECTORY_SEPARATOR . $file;
            if(is_file($fileName) && !preg_match("#^\.#", $file)){
                $newFileName = preg_replace("#\d{1,},\d{1,}#", "", $fileName);
                rename($fileName, $newFileName);
            }
        }
    }

    renameFilesInDir($path);

答案 2 :(得分:0)

<?php
$path = './images/';

if ($handle = opendir($path))
{
    while (false !== ($fileName = readdir($handle)))
    {
        if($fileName!=".." && $fileName!=".")
        {

//change below line and find first occurence of '-' and then replace everything before this with 'test' or any keyword
            $newName = substr($fileName, 4);

            $fileName = $path . $fileName;
            $newName = $path . $newName;

            rename($fileName, $newName);
        }
    }

    closedir($handle);
}
?>