import pathlib, unicodedata
p = pathlib.Path(name).resolve()
print(repr(p), p.exists())
name = unicodedata.normalize('NFC', name)
批量复制中文名文件时报 FileNotFoundError: No such file or directory,路径看着没错。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,路径来自文本或旧接口,实际夹着全角空格或不可见字符,编码也可能与文件系统不一致,批量处理时只在个别文件上炸。
围绕「批量文件复制失败」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。改完隔一天再看一次,当场正常不代表能稳住。
测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
处理上按这个顺序:对每个路径打 repr 看有没有隐藏字符;用 pathlib 拼接并解析出绝对路径;文件名先做一次 Unicode 规范化再处理。
改完只确认一件事:逐条路径 exists() 都为真,整批任务跑完不中断。
