如何用Groovy脚本按动态日期区间规则生成指定格式文件名
Groovy动态日期区间文件重命名解决方案
核心判断逻辑
无需每年手动维护日期区间,仅通过运行当日的日字段判断即可实现永久生效:
- 当日日期的日≥15:使用当前月作为标识月份
- 当日日期的日<15:使用上月作为标识月份
该逻辑自动处理跨月、跨年场景,比如2023年1月5日运行时,自动取2022年12月作为标识月份。
完整可运行脚本
import java.time.LocalDate import java.time.format.DateTimeFormatter import java.io.File // 配置项,可根据实际需求修改 def FILE_PREFIX = "XYZ" def FIXED_FLAG = "P1" // 示例中的固定标识P1,可调整 def SCAN_DIR = new File("./") // 扫描文件的目录,默认当前脚本运行目录 def RANDOM_SUFFIX_LENGTH = 3 // 示例文件名末尾的3位随机数长度,可调整 // 1. 获取当前日期 LocalDate today = LocalDate.now() // 2. 计算标识月份 LocalDate markMonth = today.dayOfMonth >= 15 ? today : today.minusMonths(1) // 3. 格式化标识字符串:APR21 格式(月份大写缩写+两位年份) def monthShort = markMonth.month.getDisplayName(java.time.format.TextStyle.SHORT, Locale.US).toUpperCase() def yearShort = markMonth.format(DateTimeFormatter.ofPattern("yy")) def markStr = "${monthShort}${yearShort}" // 4. 生成时间后缀:示例格式为yyyyMMdd+3位随机数 def dateStr = today.format(DateTimeFormatter.ofPattern("yyyyMMdd")) def randomSuffix = new Random().nextInt(10**RANDOM_SUFFIX_LENGTH).toString().padLeft(RANDOM_SUFFIX_LENGTH, '0') def timeSuffix = "${dateStr}${randomSuffix}" // 5. 生成最终文件名 def finalFileName = "${FILE_PREFIX}_${FIXED_FLAG}_${markStr}_${timeSuffix}.csv" // 6. 扫描匹配前缀的文件并重命名 def targetFiles = SCAN_DIR.listFiles().findAll { file -> file.isFile() && file.name.startsWith(FILE_PREFIX) && file.name.endsWith(".csv") } if (targetFiles.size() == 0) { println "未找到匹配前缀的CSV文件" return } // 默认取第一个匹配的文件,如有多个可自行调整逻辑 File originFile = targetFiles[0] if (originFile.renameTo(new File(SCAN_DIR, finalFileName))) { println "文件重命名成功:${originFile.name} -> ${finalFileName}" } else { println "文件重命名失败,请检查权限或文件是否被占用" }
配置调整说明
- 如果示例中的
P1是动态值,可修改FIXED_FLAG变量的赋值逻辑 - 如果末尾的
20210425777是原文件携带的流水号,可直接从原文件名中提取,替换掉随机数生成逻辑 - 扫描目录、文件前缀、后缀格式均可根据实际业务调整
内容的提问来源于stack exchange,提问作者DilipSInghMehra
相关产品推荐
相关产品推荐

