2013-08-18 66 views
1

我想弄清楚什麼是最好的方式來調用需要日期範圍參數(例如:20130801-20130815)的exe文件,然後循環它,使其最小化15幾天,然後用新的日期範圍調用exe。循環到從當前日期減去15天

我想過使用一個做,但我不知道如何(新的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) 

回答

1

有很多方法。如果你想使用PowerShell的具體方法(不do..until或在(){}),那麼你可以用管道去:

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

您可以使用一個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總是返回一個字符串)。通過返回它可以被送入流水線上的對象(使用管道|

的$(code)語法在我Write-Output意味着,無論是括號內被返回的字符串(作爲一個對象),然後進行評估。

你可以去一個更進一步,使之成爲一個參數化的功能,如果你將使用它很多:

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) 

PS如果你想編寫函數,如果可以的話,嘗試保留典型的Powershell動詞可能是一個好主意。運行get-verb | sort verb查看整個列表。 :)

相關問題