批处理脚本需求:每日复制昨日日期命名的Excel文件为今日日期名
批处理实现每日复制昨日Excel文件并重命名为今日日期
原代码存在的问题
- 日期计算逻辑错误:直接将日期字符串当作数字执行
-1运算完全不符合日期规则。比如1月1日的前一天是去年12月31日、6月1日的前一天是5月31日,这种数字减法根本无法处理月末、年末的边界情况,会生成错误的文件名。 - 冗余分割逻辑:
powershell Get-Date -Format "ddMMyyyy"输出的是无分隔符的日期字符串(如12122023),但代码中用tokens=1-3 delims=/做分割操作,这完全没必要——输出里没有/分隔符,导致%%b和%%c都是空值,虽然后续today变量结果碰巧正确,但逻辑冗余且混乱。 - 后缀笔误:原代码将目标文件后缀写成
.xls,与源文件的.xlsx不一致,会导致文件格式变更。
修正后的批处理代码
@echo off :: 获取今日日期,格式为ddMMyyyy for /f %%a in ('powershell Get-Date -Format "ddMMyyyy"') do set "today=%%a" :: 获取昨日日期,格式为ddMMyyyy for /f %%a in ('powershell (Get-Date).AddDays(-1) -Format "ddMMyyyy"') do set "yesterday=%%a" :: 执行复制操作,保持文件后缀一致 copy "DT%yesterday%.xlsx" "DT%today%.xlsx"
代码说明
- 借助PowerShell的
(Get-Date).AddDays(-1)直接计算前一天的日期,完美处理所有日期边界情况,确保日期逻辑完全正确。 - 移除冗余的字符串分割逻辑,直接获取PowerShell输出的完整日期字符串,代码更简洁清晰。
- 修正了目标文件的后缀,保持与源文件一致为
.xlsx。
内容的提问来源于stack exchange,提问作者akki
相关产品推荐
相关产品推荐

