循环到当前日期后减去15天



我正试图找出调用需要日期范围参数(例如:20130801-20130815)的exe的最佳方法,然后循环它,使其减去15天,并使用新的日期范围调用exe。

我曾想过使用do until,但我不确定如何使用(powershell/编程新手),但我确信这远远不是正确的方法:)。我刚开始想清楚,所以提前感谢您的帮助。

do {
    $startDate = (Get-Date).adddays(-34)
    $requireddate = some date that is set ad-hoc
    $startdate.ToString("yyyyMMdd")
    #[datetime]::parseexact($startdate,"MMddyyyy",$null)
    Call THE EXE at this point with the parameters $startdate and $enddate
    $enddate = $startdate.AddDays(-15) 
    write-host $enddate.ToString("yyyyMMdd")
    }
until ($enddate -eq $requireddate)

您也可以使用For循环来实现您想要实现的目标:

(我把一些东西分成了变量,我发现它在编写函数时很有帮助)

$requiredAddDays = 30
$requiredDate = (get-date).AddDays($requiredAddDays)
$startDate = (get-date).AddDays(-34)
$endAddDays = -15

for($i = $startDate; $i -lt $requiredDate; $i = $i.AddDays(1))
{
    Write-Output "$($i.ToString("yyyyMMdd"))-$($i.AddDays($endAddDays).ToString("yyyyMMdd"))"
}

使用Write-Output意味着返回的任何内容都将作为对象返回(而Write-Host总是返回字符串)。通过返回一个对象,可以将其送入管道(使用管道|

我的Write-Output中的$(code)语法意味着在返回字符串(作为对象)之前,对括号内的任何内容进行求值。

如果你要大量使用它,你可以更进一步,将其作为一个参数化函数:

Function Get-DateRange
{
Param(
[datetime]$startDate,
[int]$endAddDays,
[datetime]$requiredDate
)
    for($i = $startDate; $i -lt $requiredDate; $i = $i.AddDays(1))
    {
        Write-Output "$($i.ToString("yyyyMMdd"))-$($i.AddDays($endAddDays).ToString("yyyyMMdd"))"
    }
}

然后你可以通过运行这样的程序来调用它(一旦它加载到你的会话中):

Get-DateRange -startDate (get-Date).AddDays(-10) -endAddDays 15 -requiredDate (get-Date).AddDays(15)

附言:如果你想写函数,最好尽量使用典型的Powershell动词。运行get-verb | sort verb查看整个列表。:)

有很多方法。如果你想使用Powershell特定的方法(不要做..直到或while(){}),那么你可以使用管道:

0..15 | %{
  $changingDate = $startdate.AddDays(-$_)
  #do your work with the .exe & $changingDate
  $changingDate
}

最新更新