📁 批量目录重命名工具(适用于 BuddyPress / WordPress 路径重构)
› VFX大学 › wordpress开发 › 📁 批量目录重命名工具(适用于 BuddyPress / WordPress 路径重构)
标签: wordpress
- 该话题为空。

-
作者帖子
-
-
2025年7月31日 - 上午12:33 #847
追光管理员NewVFX在更换部分User id后导致数万用户头像不显示,原来是每个用户的头像存储在avatar目录下,每个目录以userid命名,于是制作了这个批量替换工具,在几分钟内完成了工作。这里记录并分享给大家:
🧩 工具用途
本工具适用于以下场景:
-
你的网站曾使用过超长 ID(如 3962352152127408)作为用户目录;
-
后期将用户 ID 改为简短格式(如 98927408)后,想要同步更新头像目录名;
-
数据库引用已更新,但实际头像文件夹仍为旧目录,导致头像加载失败;
-
你希望通过可视化界面,自定义规则批量替换所有目录名。
🖥 使用方式
将下面的文件保存为一个php,放到网站任意目录,适合你访问到就可以。
<?php // 设置基础目录(可根据需要手动修改) $avatar_dir = "/www/wwwroot/NewVFX/j/avatars"; $avatar_dir = rtrim($avatar_dir, '/'); // 处理表单提交 $result = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $old_prefix = trim($_POST['old_prefix']); $new_prefix = trim($_POST['new_prefix']); $suffix_length = intval($_POST['suffix_length']); if (!$old_prefix || !$new_prefix || $suffix_length <= 0) { $result = "❌ 请填写完整参数。"; } else { $dirs = scandir($avatar_dir); $count = 0; $skipped = 0; $renamed = []; foreach ($dirs as $dir) { if ($dir === '.' || $dir === '..') continue; if (strpos($dir, $old_prefix) === 0 && is_dir($avatar_dir . '/' . $dir)) { $suffix = substr($dir, -$suffix_length); $new_name = $new_prefix . $suffix; $old_path = $avatar_dir . '/' . $dir; $new_path = $avatar_dir . '/' . $new_name; if (!file_exists($new_path)) { rename($old_path, $new_path); $renamed[] = "✅ $dir → $new_name"; $count++; } else { $renamed[] = "⚠️ $dir → $new_name 已存在,跳过"; $skipped++; } } } $result = "<strong>🎉 重命名完成:</strong><br>" . implode('<br>', $renamed) . "<br><br>共重命名:<b>$count</b> 个,跳过:<b>$skipped</b> 个。"; } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>📁 批量目录重命名工具</title> <style> body { font-family: Arial, sans-serif; padding: 30px; background: #f7f7f7; } form { background: #fff; padding: 20px; border-radius: 8px; width: 500px; box-shadow: 0 0 8px rgba(0,0,0,0.1); } label { font-weight: bold; display: block; margin-top: 15px; } input[type="text"], input[type="number"] { width: 100%; padding: 8px; margin-top: 5px; box-sizing: border-box; } button { margin-top: 20px; padding: 10px 20px; font-weight: bold; background: #28a745; color: #fff; border: none; border-radius: 6px; cursor: pointer; } button:hover { background: #218838; } .result { margin-top: 30px; padding: 20px; background: #fff; border-left: 5px solid #007bff; } </style> </head> <body> <h2>🔧 批量重命名目录工具</h2> <form method="POST"> <label>原始前缀(如 39623521521)</label> <input type="text" name="old_prefix" required> <label>新的前缀(如 989)</label> <input type="text" name="new_prefix" required> <label>后缀保留位数(如 7)</label> <input type="number" name="suffix_length" min="1" required> <button type="submit">开始替换</button> </form> <?php if ($result): ?> <div class="result"><?= $result ?></div> <?php endif; ?> </body> </html>
-
将 rename-tool.php 上传到你服务器的网站根目录或任何后台目录;
-
通过浏览器访问这个文件(如:https://yoursite.com/rename-tool.php);
-
填写参数后点击【开始替换】按钮,即可自动重命名所有匹配目录。
✅ 表单参数说明
参数
示例
说明
原始前缀
39623521521
原用户 ID 的前缀部分
新的前缀
989
替换成的新用户 ID 前缀
后缀保留位数
7
仅保留原 ID 最后 7 位,例如 2127408
📝 操作日志功能(可选增强)
如果你希望记录每次替换操作的日志,你可以在重命名成功处加入如下日志代码(追加写入 .log 文件):
$log_file = __DIR__ . '/rename-log.log'; file_put_contents($log_file, date('[Y-m-d H:i:s] ') . "$dir => $new_name\n", FILE_APPEND);
添加位置:在 rename($old_path, $new_path); 后面一行。
📂 示例操作
假设有旧目录:
/www/wwwroot/NewVFX/j/avatars/3962352152127408
你填写如下:
-
原始前缀:39623521521
-
新前缀:989
-
后缀保留位数:7
点击提交后,它将被重命名为:
/www/wwwroot/NewVFX/j/avatars/98927408
🛡 注意事项
-
原目录必须以你指定的旧前缀开头;
-
工具不会处理文件,只处理一级目录;
-
如果目标目录已存在,工具将跳过,并提示「已存在,跳过」;
-
大批量操前请先备份文件,建议先备份或测试后再使用少量。
-
-
-
作者帖子
- 在下方一键注册,登录后就可以回复啦。