我目前正在使用以下代码列出特定目录中的所有子目录。
$dir = realpath('custom_design_copy/');
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object){
if(is_dir($object)){
echo "$name<br />";
}
}
这给了我看起来像这样的结果。
C:\Data\Web\custom_design_copy\Product
C:\Data\Web\custom_design_copy\Product\images
C:\Data\Web\custom_design_copy\Product\Scripts
我想要做的是重命名所有这些子目录,strtoupper()
以便标准化它们的所有名称。我知道这个rename()
功能,但我担心如果我尝试以下操作:
rename($name, strtoupper($name));
我将最终修改 custom_design_copy 的父目录名称之一,这是我希望避免的。我怎样才能避免这个问题?我正在考虑使用substr()
和搜索最后一次出现的“\”,以便在最后隔离目录名称,但必须有一个更简单的解决方案。我正在寻找的最终结果是这样的。
C:\Data\Web\custom_design_copy\PRODUCT
C:\Data\Web\custom_design_copy\PRODUCT\IMAGES
C:\Data\Web\custom_design_copy\PRODUCT\SCRIPTS
编辑:在等待建议时,我尝试了我的初步方法,发现它有效。
$dir = realpath('custom_design_copy/');
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object){
if(is_dir($object)){
$slashPos = strrpos($name, '\\');
$newName = substr($name, 0, $slashPos + 1) . strtoupper(substr($name, $slashPos + 1));
rename($name, $newName);
echo "$name<br />";
}
}