清理PLC归档冗余文件的批处理脚本误删正常文件问题咨询
批处理删除PLC归档临时文件误删原因及修复方案
误删原因
你观察到的3个不含BAK字段的误删文件,均匹配到了后两条删除规则的通配符逻辑,和第一条*BAK*.acd规则无关:
- 后两条删除规则的通配符逻辑过于宽松:你写的
del /q /s "Y:\Bays\*.Sem*"、del /q /s "Y:\Bays\*.Wrk*"中,后缀部分末尾加了通配符*,意味着只要文件名(含后缀)中.之后的任意位置出现Sem/Wrk相关字符就会被删除,而非仅匹配.SEM/.WRK后缀的文件。同时Windows批处理del命令的通配符匹配默认不区分大小写,sem/SEM/Sem/wRk/WRK都会命中规则。
例如文件灌装线程序.SemVer1.5.acd、组装站备份.Wrk副本.acd均会被后两条规则匹配删除,不需要包含BAK字段。 - Windows
del命令存在短文件名匹配遗留逻辑:就算长文件名完全不含Sem/Wrk字符,系统为长文件自动生成的8.3格式短文件名中如果包含对应字符,也会被误删。比如长文件名焊装线全流程控制程序V3.2.acd,系统生成的短文件名可能为焊装线~1.SEM,同样会命中规则。
修复方案
- 收紧通配符规则:删除后两条规则中后缀末尾多余的
*,精确匹配临时文件后缀,修改后规则如下:del /q /s "Y:\Bays\*BAK*.acd" del /q /s "Y:\Bays\*.SEM" del /q /s "Y:\Bays\*.sem" del /q /s "Y:\Bays\*.WRK" del /q /s "Y:\Bays\*.wrk" - 增加删除前校验步骤:执行删除前先将
del替换为dir /s /b,导出所有匹配到的文件清单,核对无误后再执行删除操作,示例如下:dir /s /b "Y:\Bays\*BAK*.acd" > 待删除文件清单.txt dir /s /b "Y:\Bays\*.SEM" >> 待删除文件清单.txt dir /s /b "Y:\Bays\*.sem" >> 待删除文件清单.txt dir /s /b "Y:\Bays\*.WRK" >> 待删除文件清单.txt dir /s /b "Y:\Bays\*.wrk" >> 待删除文件清单.txt - 更高精度的匹配方案:可替换为PowerShell脚本执行删除,PowerShell默认仅匹配长文件名,支持精确控制大小写匹配规则,不会出现短文件名误匹配问题。
内容的提问来源于stack exchange,提问作者Bmorg
相关产品推荐
相关产品推荐

