For Linux版:
#!/usr/local/bin/php
# Author: hutuworm
# Date: 20031115
<?php
function traveldir($dirname)
{
if($dirname[strlen($dirname)-1]!='/')
$dirname.='/';
$dirhandle=opendir($dirname);
while($file=readdir($dirhandle))
{
if($file=='.'||$file=='..')
continue;
if(is_dir($dirname.$file))
{
$newname=quoted_printable_decode(ereg_replace("%","=",$dirname.$file));
$realname='"'.$newname.'"';
$oldname='"'.$dirname.$file.'"';
if($oldname!=$realname)
system("mv $oldname $realname");
traveldir($newname.'/');
} else
continue;
}
closedir($dirhandle);
}
if(isset($argv[1]) && is_dir($argv[1]))
{
$targetdir=$argv[1];
traveldir($targetdir);
} else
echo "Usage: ./dirdecode.php /path/to/dir \n";
?>
For Windows版:
#!/usr/local/bin/php -a
# Author: hutuworm
# Date: 20031115
<?php
//遍历目录并还原中文目录名称
function traveldir($dirname)
{
if($dirname[strlen($dirname)-1]!='\\')
$dirname.='\\';
$dirhandle=opendir($dirname);
while($file=readdir($dirhandle))
{
if($file=='.'||$file=='..')
continue;
if(is_dir($dirname.$file))
{
$newname=quoted_printable_decode(ereg_replace("%","=",$file));
$oldname='"'.$dirname.$file.'"';
if($file!=$newname)
{
$realname='"'.$newname.'"';
system("ren $oldname $realname");
}
traveldir($dirname.$newname.'\\');
} else
continue;
}
closedir($dirhandle);
}
if(isset($argv[1]) && is_dir($argv[1]))
{
$targetdir=$argv[1];
traveldir($targetdir);
} else
echo "Usage: c:\php\php dirdecode.php \path\\to\dir \n";
?>