求助:修改Batch脚本实现每个文件独立随机日期(timestomper工具)
解决方法
你的脚本问题出在随机数生成代码放在了for循环外部,只执行了一次,所以所有文件共用同一组随机日期。要让每个文件都有独立的随机日期,需要把随机数生成逻辑移到for循环内部,每次遍历文件时重新生成新的随机值。
另外可以优化日期格式,给个位数的月/日/时/分补零,让格式更统一,符合你期望的示例样式。
修改后的脚本如下:
@echo off & setlocal EnableDelayedExpansion :: 遍历所有jpg文件(递归子目录) for /r %%v in (*.jpg) do ( :: 每次循环生成新的随机日期时间 Set /a _month=(!RANDOM!*12/32768)+1 :: 根据月份生成合理天数,避免无效日期 if !_month! equ 2 ( Set /a _day=(!RANDOM!*28/32768)+1 ) else if !_month! equ 4 if !_month! equ 6 if !_month! equ 9 if !_month! equ 11 ( Set /a _day=(!RANDOM!*30/32768)+1 ) else ( Set /a _day=(!RANDOM!*31/32768)+1 ) Set /a _hours=(!RANDOM!*23/32768) Set /a _minutes=(!RANDOM!*59/32768) :: 给个位数补零,统一格式 if !_month! lss 10 set "_month=0!_month!" if !_day! lss 10 set "_day=0!_day!" if !_hours! lss 10 set "_hours=0!_hours!" if !_minutes! lss 10 set "_minutes=0!_minutes!" :: 调用timestomper修改文件日期 timestomper -z !_month!-!_day!-2022 !_hours!:!_minutes!:01 -p "%%v" )
修改说明
- 随机数移至循环内:把生成
_month、_day、_hours、_minutes的代码放到for循环内部,确保每个文件都触发一次随机生成。 - 延迟扩展变量:循环内部用
!变量!而非%变量%,保证能实时读取变量的最新值。 - 日期合法性优化:针对不同月份设置合理的天数范围,避免生成类似2月30日这种无效日期。
- 补零处理:给个位数的月、日、时、分添加前导零,让日期格式和你期望的示例一致。
- 时间范围优化:小时改为0-23,分钟改为0-59,符合标准时间格式。
如果需要调整年份范围,比如不是固定2022,可添加随机年份生成逻辑,例如:
Set /a _year=(!RANDOM!*20/32768)+2003
这样会生成2003-2022之间的随机年份,替换脚本中的2022即可。
内容的提问来源于stack exchange,提问作者François Gillot
相关产品推荐
相关产品推荐

