2012-02-06 59 views
0

我有一个文件夹几乎10,000张与形象的名字一样重命名字母数字图片用PHP

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的图像什么要删除Nume RIC部分因此,例如上述的图像看起来就像

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

这是可能的吗?或者我必须手动执行它?

+0

看一看[preg_replace()](http://php.net/manual/en/fun ction.preg-replace.php) – ManseUK 2012-02-06 09:58:50

+0

你不想去掉你处理的样本中的数字部分 - 和_作为数字。你想在第一个数字后去掉所有的东西吗? – TJHeuvel 2012-02-06 10:00:10

+0

我想剥离数字部分以及数字前后的&& – user580950 2012-02-06 10:01:56

回答

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"); 

Updated

+0

它说:“警告:preg_replace()[function.preg-replace]:没有结束分隔符'/'在第16行的test1.php中找到,代码位于 $ new_filename = preg_replace(“/(\ w \ d {0,2} [\ W] {1})。+ \。)“,”。“,$ file); – user580950 2012-02-06 10:18:32

+0

哦对不起!错过/最后直接输入编辑器有时候不是那么棒:) – 2012-02-06 10:23:21

+0

同样的错误没有在 – user580950 2012-02-06 10:25:36

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

我可以写代码不是什么大问题,问题是如何区分字母数字 – user580950 2012-02-06 10:09:00

+0

添加正则表达式来重命名您的文件... – rodneyrehm 2012-02-06 10:22:37