我在文件夹中有近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
这可能吗?或者我必须手动完成?
答案 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";
}