3

我是 PHP 新手,我正在尝试做一些类似于 user580950 在Bulk Rename Files in a Folder - PHP 中询问的事情。

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

根据上述问题的答案以及所需功能的 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);
}

此代码为目标目录中的每个文件/目录返回以下错误:

警告:重命名(THE 273,the-273):第 8 行的 /Users/username/Sites/PHP/rename_files_in_directory.php 中没有这样的文件或目录

我尝试过以各种方式重新安排事情,但我完全不知道问题出在哪里。我在 Mac OSX.6.8 上运行 PHP 5.3.8 。

帮助将不胜感激!

4

2 回答 2

2

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

<?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);
    }
?>
于 2012-09-06T18:31:11.790 回答
1
$path = '/Users/username/Documents/School';
[...]
rename("$path/$file_name", "$path/$add_dashes");
[...]

或者

chdir ('/Users/username/Documents/School');

在你的代码之前。

于 2012-09-06T18:11:32.727 回答