如何使用batch脚本批量生成指定单位编码和日期范围的.rep文件
Batch 文件批量生成脚本修正方案
原有代码问题梳理
- Batch 原生不支持类C风格的循环语法,需使用 Batch 自带的循环、变量扩展规则
- 原有文件名拼接逻辑未使用循环变量,无法生成带不同日期的独立文件
- 未做日期合法性校验,直接对8位日期数值递增会产生跨月/跨年的非法日期值
修正后可运行代码
@echo off cls color 1f title Bat automatiza 2V :menu Time /t Date /t echo ********************************* echo * Automatize files generate * echo ********************************* set /p "unit_code=请输入Unit code:" set /p "start_date=请输入Initial date(格式YYYYMMDD):" set /p "end_date=请输入Final date(格式YYYYMMDD):" :: 开启延迟变量扩展 setlocal enabledelayedexpansion :: 循环处理日期,直到等于结束日期 set "current_date=%start_date%" :date_loop if !current_date! gtr %end_date% goto end_loop :: 生成对应空文件 type nul > 2v!unit_code!!current_date!.rep :: 日期加1计算(支持跨月、跨年) set "year=!current_date:~0,4!" set "month=!current_date:~4,2!" set "day=!current_date:~6,2!" set /a "day=1!day!-100, month=1!month!-100, year+=0" set /a "a=(14-month)/12, y=year+4800-a, m=month+12*a-3, jdn=day + (153*m+2)/5 + 365*y + y/4 - y/100 + y/400 - 32045 + 1" set /a "l=jdn+68569, n=(4*l)/146097, l=l-(146097*n+3)/4, i=(4000*(l+1))/1461001, l=l-(1461*i)/4+31, j=(80*l)/2447, day=l-(2447*j)/80, l=j/11, month=j+2-12*l, year=100*(n-49)+i+l" :: 补日期前导零 if !day! lss 10 set "day=0!day!" if !month! lss 10 set "month=0!month!" set "current_date=!year!!month!!day!" goto date_loop :end_loop endlocal echo 所有文件生成完成 pause
简化方案(仅同月份场景适用)
如果你的使用场景固定为同月份的连续日期,可以用更简单的for /L循环替换上面的日期计算逻辑,运行效率更高:
:: 同月份场景简化版循环 set /a start_day=%start_date:~6,2% set /a end_day=%end_date:~6,2% set date_prefix=%start_date:~0,6% for /L %%d in (%start_day%,1,%end_day%) do ( set "day=%%d" if !day! lss 10 set "day=0!day!" type nul > 2v!unit_code!!date_prefix!!day!.rep )
内容的提问来源于stack exchange,提问作者Erick Barbosa
相关产品推荐
相关产品推荐

