用PHP重命名字母数字图像

用PHP重命名字母数字图像,php,Php,我在一个文件夹中有近10000张图片,图片名称如下 朝鲜冷杉(Abies_koreana_Blauer_Pfiff_05-06-10_1.jpg) 朝鲜冷杉(Abies_koreana_Prostate_Beauty_05-05-10_2.jpg) 日本扁柏06-10-10\u 3.jpg 山毛榉(Fagus_sylvatica_Dawyck_Gold_05-02-10_1.jpg) 我想做的是使用PHP重命名图像,这样图像名称中只保留字符,我想删除数字部分,例如上面的图像 Abies_kore

我在一个文件夹中有近10000张图片,图片名称如下

朝鲜冷杉(Abies_koreana_Blauer_Pfiff_05-06-10_1.jpg)
朝鲜冷杉(Abies_koreana_Prostate_Beauty_05-05-10_2.jpg)
日本扁柏06-10-10\u 3.jpg
山毛榉(Fagus_sylvatica_Dawyck_Gold_05-02-10_1.jpg)

我想做的是使用PHP重命名图像,这样图像名称中只保留字符,我想删除数字部分,例如上面的图像

Abies_koreana_Blauer_Pfiff.jpg
朝鲜冷杉(Abies_koreana_Prostrate_Beauty).jpg
日本扁柏 Fagus_sylvatica_Dawyck_Gold.jpg

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

您可以使用PHP(或bash)执行此操作。 您的朋友将浏览目录,修改文件名,以反映磁盘上更改的文件名

您要做的事情可以在大约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";
}

为每个文件名执行此操作

$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");
函数重命名文件($directory)
{
$handler=opendir($directory);
而($file=readdir($handler)){
如果($file!=“&&&$file!=”){
if(preg_match(“/(\w\d{0,2}[\w]{1}.+\)/”,$file)){
echo$文件。“
”; } 重命名($directory./“$file,$directory./”.preg_replace(“/(\w\d{0,2}[\w]{1}.+\)/”,“,$file)); } } closedir($handler); } 重命名文件(“c:/wserver”);

更新

看看你不想去掉数字部分,在你的样本中,你把-和作为数字。你想去掉第一个数字后面的所有字符吗?我想去掉数字部分以及数字前后的-&u所以,如果总是要删除11个字符,那么substr($filename,0,-11)应该是正确的。我想你的意思是我会找到”先从右到左删除12个字符,然后从右到左删除12个字符?我可以编写这段代码,这没什么大不了的,问题是如何区分字母数字添加的正则表达式来重命名您的文件…它说“警告:preg_replace()[function.preg replace]:在代码所在的第16行test1.php中未找到结尾分隔符“/”$new\u filename=preg\u replace(“/(\w\d{0,2}[\w]{1}.+\”,“,$file));哦,抱歉!错过/结尾处。直接在编辑器中键入有时不是个好主意:)好的,让我为您测试此函数。如果需要,将返回编辑。再次编辑尝试按原样使用该函数,并在函数调用中替换文件夹/目录的路径