我有很多文件,其中一些名称中包含“ 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"
我已经在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] 删除。
我来说两句