如何使用PHP结合含ID映射的JS文件批量重命名目录内图片文件
实现步骤
- 读取
img.js文件提取JSON映射结构,转换为PHP数组后做键值反转,得到「旧文件名前缀 => 新文件名前缀」的对应关系 - 遍历目标目录下的所有图片文件,匹配映射后执行重命名操作
可直接运行代码
<?php // 读取img.js内容 $jsContent = file_get_contents('img.js'); // 提取JSON片段 preg_match('/\{[\s\S]*\}/', $jsContent, $matchRes); if (!$matchRes) { die("img.js 中未读取到有效映射数据"); } // 转换为PHP数组 $originMap = json_decode($matchRes[0], true); if (json_last_error() !== JSON_ERROR_NONE) { die("映射数据解析错误,请检查 img.js 格式是否合法"); } // 键值反转,适配查找逻辑 $idMap = array_flip($originMap); // 定义图片目录路径,请根据实际情况修改 $imgPath = "./images/"; // 遍历所有png文件 $imgList = glob($imgPath . "*.png"); foreach ($imgList as $oldFilePath) { $oldBaseName = basename($oldFilePath); $oldId = pathinfo($oldBaseName, PATHINFO_FILENAME); // 匹配到映射则执行重命名 if (isset($idMap[$oldId])) { $newFilePath = $imgPath . $idMap[$oldId] . ".png"; if (rename($oldFilePath, $newFilePath)) { echo "处理成功:{$oldBaseName} → {$idMap[$oldId]}.png" . PHP_EOL; } else { echo "处理失败:{$oldBaseName} 权限不足或文件被占用" . PHP_EOL; } } else { echo "跳过无匹配文件:{$oldBaseName}" . PHP_EOL; } } echo "全部任务执行完成"; ?>
注意事项
- 运行脚本前请先备份完整的
images目录,避免重命名错误导致文件丢失 - 请将脚本放在与
img.js、images目录同级的位置运行,若路径不同可自行修改代码中$imgPath变量的取值 - 若图片格式不止png,可修改
glob参数的后缀匹配规则,例如改成*.{png,jpg,gif}同时匹配多种格式 - 数千张文件量级下默认PHP配置即可正常运行,若文件量过大可调整PHP执行超时时间限制
内容的提问来源于stack exchange,提问作者MShack
相关产品推荐
相关产品推荐

