PHP批量重命名,具有多个重命名功能

PHP批量重命名,具有多个重命名功能,php,Php,我是PHP新手,我正在尝试做一些类似于user580950在上询问的事情 我想写一个脚本,迭代给定目录中所有文件和目录的名称,并做两件事:用破折号替换空格,将所有大写字母转换为小写字母 根据上述问题的答案以及所需函数的PHP手册条目,我得出了以下代码: if ($handle = opendir('/Users/username/Documents/School')) { while (false !== ($file_name = readdir($handle))) {

我是PHP新手,我正在尝试做一些类似于user580950在上询问的事情

我想写一个脚本,迭代给定目录中所有文件和目录的名称,并做两件事:用破折号替换空格,将所有大写字母转换为小写字母

根据上述问题的答案以及所需函数的PHP手册条目,我得出了以下代码:

if ($handle = opendir('/Users/username/Documents/School')) {

    while (false !== ($file_name = readdir($handle))) { 
        $to_lower = strtolower($file_name);
        $add_dashes = str_replace(" ", "-", $to_lower);
        rename($file_name , $add_dashes);
    }

    closedir($handle);
}
此代码针对目标目录中的每个文件/目录返回以下错误:

警告:重命名(273,THE-273):中没有此类文件或目录 /Users/username/Sites/PHP/rename\u files\u在第8行的\u directory.PHP中

我尝试过用各种方式重新安排事情,但我完全不知道问题出在哪里。我正在MacOSX.6.8上运行PHP5.3.8

非常感谢您的帮助

$path = '/Users/username/Documents/School';
[...]
rename("$path/$file_name", "$path/$add_dashes");
[...]


在您的代码之前。

您需要转义空格。尝试直接使用以下命令重命名:

<?php

if ($handle = opendir('/Users/username/Documents/School')) {

    while (false !== ($file_name = readdir($handle))) { 
        $to_lower = strtolower($file_name);
        $add_dashes = str_replace(" ", "-", $to_lower);
        exec("mv ".escapeshellarg($file_name). " ". $to_lower);
        }

    closedir($handle);
    }
?>


您需要在调用
重命名()
时放入完整的文件路径吗?我不这么认为,因为我认为opendir()函数会打开目录,但可能这就是问题所在。我最终不需要这样做,但我确实尝试过,得到了与以前相同的错误,还有一个“零除”错误。@Raidence,虽然,当我尝试使用指向不同目录的路径的相同脚本时,我得到了一个类似的错误:
警告:重命名(Sivulka 3,6,7-analysis.odt,Sivulka-3,6,7-analysis.odt):第8行的/Users/username/Sites/PHP/rename_files_in_directory.PHP中没有这样的文件或目录用法:mv[-f |-I |-n][-v]源目标mv[-f |-I |-I |-n][-v]来源。。。目录
条目是文件还是目录有关系吗?不,没有关系,我尝试创建了
Sivulka 3,6,7 analysis.odt
作为目录和文件,并使用上面的脚本成功地重命名了它们。您可以重命名该目录中的其他文件吗?我尝试的第一个目录只包含其他目录。我试图更改到另一个目录的路径,但出现了错误,就我所知,除了路径之外,没有什么不同。
<?php

if ($handle = opendir('/Users/username/Documents/School')) {

    while (false !== ($file_name = readdir($handle))) { 
        $to_lower = strtolower($file_name);
        $add_dashes = str_replace(" ", "-", $to_lower);
        exec("mv ".escapeshellarg($file_name). " ". $to_lower);
        }

    closedir($handle);
    }
?>