使用PHP重命名字母数字图像

时间:2012-02-06 09:57:07

标签: php

我在文件夹中有近10,000张图像,图像名称如

Abies_koreana_Blauer_Pfiff_05-06-10_1.jpg
Abies_koreana_Prostrate_Beauty_05-05-10_2.jpg
Chamaecyparis_obtusa_Limerick 06-10-10_3.jpg
Fagus_sylvatica_Dawyck_Gold_05-02-10_1.jpg

我想要做的是使用PHP重命名图像,以便只有图像名称中保留的字符才能删除数字部分,例如上面的图像看起来像

Abies_koreana_Blauer_Pfiff.jpg
Abies_koreana_Prostrate_Beauty.jpg
Chamaecyparis_obtusa_Limerick.jpg
Fagus_sylvatica_Dawyck_Gold.jpg

这可能吗?或者我必须手动完成?

2 个答案:

答案 0 :(得分:1)

foreach文件名执行此操作

$new_filename = preg_replace("/(\w\d{0,2}[\W]{1}.+\.)/",".",$current_file_name);

所以最终功能可能如下所示

function renameFiles($directory) 
{

$handler = opendir($directory);
while ($file = readdir($handler)) {
if ($file != "." && $file != "..") {

  if(preg_match("/(\w\d{0,2}[\W]{1}.+\.)/",$file)) {
    echo $file."<br/>";  
  }
rename($directory."/".$file,$directory."/".preg_replace("/(\w\d{0,2}[\W]{1}.+\.)/",".",$file));
}
}
closedir($handler);
}

renameFiles("c:/wserver");

已更新

答案 1 :(得分:0)

您可以使用PHP(或bash)执行此操作。 您的朋友RecursiveDirectoryIterator遍历目录,preg_replace()修改文件名,rename()以反映磁盘上已更改的文件名。

您要做的事情可以在~10行代码中完成。使用上面的成分,您应该能够编写一个小脚本来自行更改文件名。

<强>更新

丢弃数字部分(根据给出的示例)可以使用相当简单的正则表达式来完成。请注意,这将删除[a-z]文件名和后缀(“.jpq”)之间的任何数字(-_)。所以你不会得到“foo3.png”而是“foo.png”。如果这是一个问题,可以调整正则表达式以满足该标准......

<?php

$files = array(
    'Abies_koreana_Blauer_Pfiff_05-06-10_1.jpg',
    'Abies_koreana_Prostrate_Beauty_05-05-10_2.jpg',
    'Chamaecyparis_obtusa_Limerick 06-10-10_3.jpg',
    'Fagus_sylvatica_Dawyck_Gold_05-02-10_1.jpg',
);

foreach ($files as $source) {
    // strip all numeric (date, counts, whatever) 
    // characters before the file's suffix
    // (?= …) is a non-capturing look-ahead assertion
    // see http://php.net/manual/en/regexp.reference.assertions.php for more info
    $destination = preg_replace('#[ _0-9-]+(?=\.[a-z]+$)#i', '', $source);
    echo "'$source' to '$destination'\n";
}