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

これは可能ですか?または私はそれを手動で行う必要がありますか?

0
数字の前後に - と_をつけたい
追加された 著者 user580950,
私はあなたが意味することは、私が "見つけなければならないと思います。"最初に右から左に12文字を削除しますか?
追加された 著者 user580950,
preg_replace()をご覧ください。
追加された 著者 ManseUK,
ですから、削除する文字数が常に11文字であれば、substr($ filename、0、-11)を指定する必要があります。
追加された 著者 Thomas Kekeisen,
あなたはあなたが扱うサンプル中で数値部分を取り除きたくないです - そして_は数字です。最初の番号の後にすべてを取り除きたいですか?
追加された 著者 TJHeuvel,

2 答え

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."
"; } rename($directory."/".$file,$directory."/".preg_replace("/(\w\d{0,2}[\W]{1}.+\.)/",".",$file)); } } closedir($handler); } renameFiles("c:/wserver");

Updated

1
追加された
"警告:preg_replace()[function.preg-replace]:コードが置かれている行16のtest1.phpに終了デリミタ '/'はありません。$ new_filename = preg_replace(" /(\ w \ d { 0,2} [\ W] {1}。+ \。) "、"。 "、$ file);
追加された 著者 user580950,
同じエラー終了デリミタ '/'は見つかりませんでした
追加された 著者 user580950,
素晴らしい作品:)
追加された 著者 user580950,
あ、ごめんなさい!失敗した/最後に。エディタに直接入力することは、時には素晴らしいアイデアではありません:)
追加された 著者 Jaspreet Chahal,
この機能をテストしてみましょう。必要に応じて編集して戻ってきます。
追加された 著者 Jaspreet Chahal,
もう一度編集して関数をそのまま使用して、関数呼び出しでフォルダ/ディレクトリへのパスを置き換えてみてください
追加された 著者 Jaspreet Chahal,

これはPHP(またはbash)で行うことができます。 あなたの友人は、 RecursiveDirectoryIterator です= "nofollow"> 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
追加された
あなたのファイルの名前を変更するための正規表現を追加...
追加された 著者 rodneyrehm,
私は大したことではないコードを書くことができます、問題は区別する方法です英数字
追加された 著者 user580950,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com