2

日付範囲パラメーター (例: 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)
4

2 に答える 2

7

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"))"

}

UsingWrite-Outputは、返されるものは何でもオブジェクトとして返されることを意味します (Write-Host常に文字列を返します)。オブジェクトを返すことで、パイプラインに渡すことができます (パイプを使用|)

myの $( 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してリスト全体を表示します。:)

于 2013-08-19T10:42:02.157 に答える