拆分文件名并用文件内容重命名的PHP代码

用户

我有很多文件,其中一些名称中包含“ 5010”,通常当我看到这些数字时,我打开文件并获取名称REF旁边的代码,并将其粘贴而不是5010,然后将其发送到服务器,但是我想通过一个能够自己完成此任务的php脚本来完成它,关于从何处开始的任何想法?

例如我的文件名是

"hasdbgf.5010.dfgur.fde"

我要删除“ 5010”,因此打开文件:

DTM*405*2022~
N1*PR*AEA~
N3*151 AVENUE~
N4*06156~
REF*2U*60054~

我看到REF * 2U之后是“ 60054”,因此我将其重命名:

"hasdbgf_60054_dfgur.fde"
阿斯米尔·扎希罗维奇(Asmir Zahirovic)

我已经在5分钟内编写了此脚本。只需将其放在您要重命名操作的目录中即可。就这些。

//expression to be found in file name
$find = '.5010.';

//directory name
//we will store renamed files here
$dirname = 'renamed_5010';
if(!is_dir($dirname))
    mkdir($dirname, 0777);

//read all files from a directory
//skip directories
$directory_with_files = 'C:\dir\path';
$dh  = opendir($directory_with_files);
$files = [];
while (false !== ($filename = readdir($dh)))
{
    if(in_array($filename, ['.', '..']) || is_dir($filename))
        continue;

    $files[] = $filename;
}

//iterate collected files
foreach($files as $file)
{
    //check if file name is matching $find
    if(stripos($file, $find) !== false)
    {

        //open file
        $handle = fopen($file, "r");
        if ($handle)
        {
            //read file, line by line
            while (($line = fgets($handle)) !== false)
            {

                //find REF line
                if(stripos($line, 'REF') !== false)
                {
                    //we are going to REF line reverse
                    $reverse = strrev($line);
                    $found = false;
                    $refnumber = [];

                    //find reference number
                    for($i = 0; $i < strlen($reverse); $i++)
                    {

                        if(is_numeric($reverse[$i]))
                        {
                            $found = true;
                            $refnumber[] = $reverse[$i];
                        }

                        if($found == true && !is_numeric($reverse[$i]))
                            break;
                    }

                    //glue refernce numbers
                    //check if reference number is not empty
                    $refnumber = strrev(join('', $refnumber));
                    if(!empty($refnumber))
                    {
                        $refnumber = '_' . $refnumber . '_';
                        $filerenamed = str_replace($find, $refnumber, $file);
                        copy($file, $dirname . '/' . $filerenamed);
                    }

                    echo $refnumber . "\n";
                }
            }

            //close file
            fclose($handle);
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章