如何遍历批处理文件中的日期范围

Luk*_*e T 4 variables scripting loops batch-file

我通过批处理文件运行报告,目前我有一个消息框提示,允许我输入我想要运行报告的日期,这样可以正常工作并将变量设置为输入日期.

我怎么试图进一步自动化这个.

例如,我想运行此报告从060114到120114(MMDDYY)我想使用循环函数,以便运行批处理的脚本将运行范围中的每个日期,一旦到达结束日期转到批处理文件的下一部分.

例如,第一部分使用输入的日期并分配给变量%b

我为日期范围设置了两个提示,从日期将分配给变量%c,结束日期将分配给%d.

日期正确分配给变量,使用循环函数的最佳方法是什么

提前干杯

卢克..

moj*_*ojo 6

处理日期的最佳方法不是重新发明轮子.Batch/CMD没有日期概念,因此要遍历日历日期需要自己实现(包括月份长度,闰年检查等).

对于此任务,我建议使用脚本语言,如PowerShell.此脚本daterange.ps1生成指定的两个日期之间的日期列表(包括).

param(
  [String]
  $DateStart,

  [String]
  $DateFinish
)


Function ParseDateStr {
  param(
    [String]
    $s
  )
  return Get-Date `
           -Month $s.substring(0,2) `
           -Day $s.substring(2,2) `
           -Year ('20'+$s.substring(4,2)) `
           -Hour 0 -Minute 0 -Second 0
}

$start = ( ParseDateStr $DateStart )
$finish = ( ParseDateStr $DateFinish )

$delta = New-TimeSpan -Days 1

for ($d = $start; $d -le $finish; $d +=$delta) {
    Write-Host $d.toString("MMddyy")
}
Run Code Online (Sandbox Code Playgroud)

它可以在批处理文件中使用,例如:

@ECHO OFF
SETLOCAL

SET /P STARTDATE=Starting date: 
SET /P ENDDATE=Ending date: 

FOR /F %%d IN ('powershell -NoProfile -ExecutionPolicy Bypass -File daterange.ps1 %STARTDATE% %ENDDATE%') DO (
    @ECHO %%d
)
Run Code Online (Sandbox Code Playgroud)

循环变量%d将为范围中的每一天提供正确格式化的日期.

例如:

C:\temp>sol
Starting date: 022716
Ending date: 030116
022716
022816
022916
030116
Run Code Online (Sandbox Code Playgroud)