2016-04-27 23 views
3

小さなことをお聞きしたいと思います。
私はメインフォルダにいくつかの別のフォルダがあります。 このサブフォルダの名前は次のとおりです。PHP:フォルダの名前を変更するには

V1、V2、V3、V4 ...

私はこれらのいずれかのフォルダを削除すると、知っていただきたいと思い

例えばV2 - >私はこのすべての名前を変更する方法

V1、V2、V3に戻っフォルダV1、V3、V4を持っています。

私はこのコードを試してみましたが、それは動作しません:

$path='directory/'; 
$handle=opendir($path); 
$i = 1; 
while (($file = readdir($handle))!==false){ 
    if ($file!="." && $file!=".."){ 
     rename($path . $file, $path . 'v'.$i); 
     $i++; 
    } 

ありがとうございました!

+0

$ fileがデバッガにあると思われるものか、貧弱な人のデバッグecho $ fileを確認してください。 – Halfstop

+0

このフォルダ内の他のディレクトリ、または単にv *ですか? – Hexchaimen

答えて

2

は、このコードは、数字に続く「V」で始まる名前を持つすべてのディレクトリを検索します。フィルタ

ディレクトリ:V1、V2、V3、.....除外
ディレクトリ:V_1、v2_1、V3A、T1、...、XYZ

決勝ディレクトリ:V0、V1、V2、 v3、.....

最終的なディレクトリをv1から開始する必要がある場合は、再度ディレクトリリストを取得してもう一度名前変更プロセスを実行します。私はこれが助けて欲しい!

$path='main_folder/'; $handle=opendir($path); $i = 1; $j = 0; $foldersStartingWithV = array(); 

// Folder names starts with v followed by numbers only 
// We exclude folders like v5_2, t2, v6a, etc 
$pattern = "/^v(\d+?)?$/"; 

while (($file = readdir($handle))!==false){ 
    preg_match($pattern, $file, $matches, PREG_OFFSET_CAPTURE); 

    if(count($matches)) { 
    // store filtered file names into an array 
    array_push($foldersStartingWithV, $file); 
    } 
} 

// Natural order sort the existing folder names 
natsort($foldersStartingWithV); 

// Loop the existing folder names and rename them to new serialized order 
foreach($foldersStartingWithV as $key=>$val) { 
// When old folder names equals new folder name, then skip renaming 
    if($val != "v".$j) { 
     rename($path.$val, $path."v".$j); 
    } 
    $j++; 
} 
+0

'natsort()'でニース!! – Hexchaimen

1

これはあなたを助けます。しかし、私は許可がサーバーで正しいと仮定するつもりです、あなたはスクリプトから名前を変更することができます:

// Set up directory 
$path = "test/"; 
// Get the sub-directories 
$dirs = array_filter(glob($path.'*'), 'is_dir'); 
// Get a integer set for the loop 
$i=0; 
// Natural sort of the directories, props to @dinesh 
natsort($dirs); 

foreach ($dirs as $dir) 
{ 
    // Eliminate any other directories, only v[0-9] 
    if(preg_match('/v.(\d+?)?$/', $dir) 
    { 
     // Obtain just the directory name 
     $file = end(explode("/", $dir)); 
     // Plus one to your integer right before renaming. 
     $i++; 
     //Do the rename 
     rename($path.$file,$path."v".$i); 
    } 
} 
関連する問題