2011-06-19 53 views
1

と間違っている何が私は2つのパラメータが期待するカウンタのスクリプトを持っています。PowerShellの私のカウントダウンタイマー

2)カウンタの持続時間(秒)。

例えば、私が3,を入力した場合、3秒後にタイマーが10から0にカウントダウンし、それを毎秒出力に書きます。

は、これは私のスクリプトです:

$timeBeforeStart = $args[0] 
$waitSeconds = $args[1] 

$startTime = get-date 
$endTime = $startTime.addSeconds($waitSeconds) 
$timeSpan = new-timespan $startTime $endTime 
start-sleep -s $timeBeforeStart 
while ($timeSpan -gt 0) 
{ 
    $timeSpan = new-timespan $(get-date) $endTime 
    write-host $([string]::Format("`rTime Remaining: {0:d2}:{1:d2}:{2:d2}", 
    $timeSpan.hours, $timeSpan.minutes, $timeSpan.seconds)) 
    sleep 1 
} 

は、残念ながら、それは動作しません、スリープではなく、ディレイカウンタのカウンタとの同時性を動作するようです。

PS C:\> c:\555.ps1 3 10 
Time Remaining: 00:00:07 
Time Remaining: 00:00:05 
Time Remaining: 00:00:04 
Time Remaining: 00:00:03 
Time Remaining: 00:00:02 
Time Remaining: 00:00:01 
Time Remaining: 00:00:00 
Time Remaining: 00:00:00 

私もと同じ結果-s スタート - 睡眠を試してみました。

ところで、睡眠と「睡眠開始」の違いは何ですか?

答えて

2

スリープと "start-sleep -s"の違いは何ですか

差異はありません。sleepは、Start-Sleepの単なるエイリアスです。

残念ながら、それは動作しません、スリープはカウンタを遅らせる代わりにカウンタと同時に動作するようです。

あなたはカウンタが最初$timeSpanを取得する前に開始する前に睡眠を置きたいと思うかもしれません:

start-sleep -s $timeBeforeStart 

$startTime = get-date 
$endTime = $startTime.addSeconds($waitSeconds) 
$timeSpan = new-timespan $startTime $endTime 
while ($timeSpan -gt 0) 
{ 
# ... 
} 
2

は、この方法を試してみてください:

$timeBeforeStart = 3 
$waitSeconds = 10 

Start-Sleep -Seconds $timeBeforeStart 

$waitSeconds..0 | Foreach-Object { 
    Write-Host "Time Remaining: $_" 
    Start-Sleep -Seconds 1 
} 


Time Remaining: 10 
Time Remaining: 9 
Time Remaining: 8 
Time Remaining: 7 
Time Remaining: 6 
Time Remaining: 5 
Time Remaining: 4 
Time Remaining: 3 
Time Remaining: 2 
Time Remaining: 1 
Time Remaining: 0 
0

これも同じことを行います。

$timeBeforeStart = 3 
$waitSeconds = 10 

Start-Sleep -Seconds $timeBeforeStart 
$endTime = (get-date).addSeconds($waitSeconds) 

while ((get-date) -lt $endTime) 
    { 
    Write-Host "Time Remaining: $("{0}" -f ([int](new-timespan $(get-date) $endTime).totalseconds))" 
    Start-Sleep -Seconds 1 
    } 
1

Trこの方法:

$timeBeforeStart = 0 
$waitSeconds = 60 

Start-Sleep -Seconds $timeBeforeStart 

$waitSeconds..0 | Foreach-Object { 
    Write-Host "`r   Time Remaining: $_ " -NoNewline -foregroundcolor green 
    Start-Sleep -Seconds 1 
} 
関連する問題