You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理脚本日期跨月问题求助:生成连续日期CSV文件

批处理脚本实现跨月连续日期生成并导出CSV

我编写了如下批处理脚本,用于从运行当日的次日开始生成连续日期,并将其导出至CSV文件。目前脚本仅对日期进行累加,当日期达到31天后,会继续生成32、33等无效日期,无法自动切换至下月。期望生成的CSV文件能够像示例那样自动跨月,生成有效的日期格式。

现有脚本

@Echo off

WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_error


FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
   IF "%%~L"=="" goto s_done
      Set _yyyy=%%L
      Set _mm=00%%J
      Set _dd=00%%G
      Set _hour=00%%H
      SET _minute=00%%I
)
:s_done

:: Pad digits with leading zeros
      Set _mm=%_mm:~-2%
      Set _dd=%_dd:~-2%
      Set _hour=%_hour:~-2%
      Set _minute=%_minute:~-2%
      


set /a _dd+=1
Set z1=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z2=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z3=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z4=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z5=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z6=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z7=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z8=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z9=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z10=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z11=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z12=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z13=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z14=%_mm%/%_dd%/%_yyyy%
set /a _dd+=1
Set z15=%_mm%/%_dd%/%_yyyy%


Echo %z1%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv
Echo %z2%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z3%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z4%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z5%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z6%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z7%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z8%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z9%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z10%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z11%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z12%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z13%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z14%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
Echo %z15%,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM, >> dates.csv 
  

pause

期望导出的CSV格式

10/28/2022,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM
10/29/2022,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM
10/30/2022,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM
10/31/2022,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM
11/1/2022,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM
11/2/2022,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM
11/3/2022,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM
11/4/2022,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM

解决方案

批处理原生处理日期跨月逻辑非常繁琐,建议借助PowerShell来完成日期计算,它能自动处理月份、年份的切换,代码更简洁可靠。以下是修正后的脚本:

@echo off
setlocal enabledelayedexpansion

:: 清空原有CSV文件(可选,根据需求调整)
if exist dates.csv del dates.csv

:: 获取当前日期,计算次日作为起始日期,循环生成15天的日期
for /l %%i in (1,1,15) do (
    :: 调用PowerShell计算第%%i天的日期(从次日开始)
    for /f "delims=" %%d in ('powershell -Command "(Get-Date).AddDays(%%i).ToString('M/d/yyyy')"') do (
        set "current_date=%%d"
    )
    :: 写入CSV
    echo !current_date!,12:15 AM,5:00 AM,10:00 AM,12:15 PM,5:00 PM,10:00 PM>> dates.csv
)

echo 日期生成完成,已保存到dates.csv
pause

关键说明

  1. PowerShell日期计算:通过Get-Date.AddDays(%%i)自动累加天数,无需手动处理月份切换、闰年等复杂逻辑,生成的日期格式直接符合需求。
  2. 延迟变量扩展:启用enabledelayedexpansion确保循环中变量current_date能正确更新。
  3. CSV写入:每次循环生成对应日期的CSV行,自动追加到文件中。

内容的提问来源于stack exchange,提问作者Ionut Bejinariu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:01:16