我已经写了一段代码,从1数到20,5开始睡眠,然后继续。但是我需要计数器每秒计数1,所以整个循环需要25秒才能运行。现在只需要7-9秒。
$counter = 0
for ($counter -lt 20)
{
Start-sleep 0
$Counter++
write-host $Counter
if ($Counter -eq 10)
{
Start-sleep 5
}
If ($Counter -eq 20)
{
Break
}
}发布于 2019-01-06 02:15:34
秒表可以用来更好地计时。一旦您达到阈值(10秒),您必须重新启动它。
这种方法唯一的缺点是,如果你是在7秒,然后你在循环中做了一些事情,花了5秒,你将在12秒到达10秒循环(这就是为什么我使用-ge作为条件)。
$StopWatch = New-Object -TypeName 'System.Diagnostics.Stopwatch'
$StopWatch.Start()
For ($Counter = 0;$counter -lt 20) {
Write-Host '.' -NoNewline
Start-Sleep -Milliseconds 500
if ($StopWatch.Elapsed.Seconds -ge 10) {
Write-Host ''
Write-Host "$($StopWatch.Elapsed.Seconds) seconds elapsed... " -ForegroundColor Cyan
$StopWatch.Restart()
}
}或者,您可以将您的主要内容放在一个作业中,这样即使需要2分钟才能完成,10秒循环仍将正确执行。
$MainStuffAction = {
Start-Sleep -Seconds 20
Write-Host 'Completed !'
}
$MainStuff = Start-Job -ScriptBlock $MainStuffAction
$StopWatch = New-Object -TypeName 'System.Diagnostics.Stopwatch'
$StopWatch.Start()
while($true) {
if ($StopWatch.Elapsed.Seconds -ge 10) {
Write-Host '10 seconds elapsed!'
# We only restart the stopwatch at the end to get our full 10 seconds
$StopWatch.Restart()
}
elseif ($MainStuff.State -ne 'Running') {
$MainStuff | Receive-Job
$MainStuff = Start-Job -ScriptBlock $MainStuffAction
}
Start-Sleep -Milliseconds 500
}发布于 2019-01-06 07:55:57
这是另一种方法。它使用while结构并显示$Counter和$Stopwatch的值,因此您可以清楚地看到它是否正在执行您想要的操作。笑一笑
$Stopwatch = [System.Diagnostics.Stopwatch]::new()
$Stopwatch.Start()
$Counter = 0
# correct for off-by-one
$Threshold = 19
while ($Counter -le $Threshold)
{
Start-Sleep -Seconds 1
$Counter ++
'Counter = {0:D2}, Seconds = {1:D2}' -f $Counter, $Stopwatch.Elapsed.Seconds
if ($Counter -eq 10)
{
Start-Sleep -Seconds 5
'{0} {1:D2} Seconds' -f (' ' * 15), $Stopwatch.Elapsed.Seconds
}
}
$Stopwatch.Stop()
$Stopwatch.Elapsed.TotalSeconds输出...
Counter = 01, Seconds = 01
Counter = 02, Seconds = 02
Counter = 03, Seconds = 03
Counter = 04, Seconds = 04
Counter = 05, Seconds = 05
Counter = 06, Seconds = 06
Counter = 07, Seconds = 07
Counter = 08, Seconds = 08
Counter = 09, Seconds = 09
Counter = 10, Seconds = 10
15 Seconds
Counter = 11, Seconds = 16
Counter = 12, Seconds = 17
Counter = 13, Seconds = 18
Counter = 14, Seconds = 19
Counter = 15, Seconds = 20
Counter = 16, Seconds = 21
Counter = 17, Seconds = 22
Counter = 18, Seconds = 23
Counter = 19, Seconds = 24
Counter = 20, Seconds = 25
25.2769325https://stackoverflow.com/questions/54054338
复制相似问题