2017-10-11 21 views
-3

批次(運行命令)我在文本非常大的出口列表,我需要經過每個條目,並使用進入運行命令。但我希望分批次處理500個,因爲我需要處理時間。如何通過一個文本文件迴路500

我不明白的是我怎麼遍歷文本文件,但一次只能運行一個有限數量,然後等待一定的時間,跑下一個塊,直到他們都完成之前。

有人可以用一個例子,我可以申請我的方案幫助嗎?

回答

0

我可能不會在@ManuelBatsching的回答中使用for循環,因爲在PowerShell中有很多次要使用ForEach-Object或其他一些流水線內容。你仍然可以做同樣的基本的東西,但是:

$i = 0; 
$BatchSize = 500; 
$SleepSeconds = 5; 

Get-Content -Path $FileName | ForEach-Object { 
    $i++; 

    # Do work here 

    if ($i % $BatchSize -eq 0) { 
     Start-Sleep -Seconds $SleepSeconds; 
    } 
} 

你也可以做這樣的事情,並利用ReadCount參數Get-Content

$BatchSize = 500; 
$SleepSeconds = 5; 

Get-Content -Path $FileName -ReadCount $BatchSize | ForEach-Object { 

    $_ | ForEach-Object { 
     # Do work here 
    } 

    Start-Sleep -Seconds $SleepSeconds; 
} 
+0

非常感謝你 - 這對我來說更有意義,並且可以直接用於我的實際場景。這作爲睡眠觸發器「($ i%$ BatchSize -eq 0)」對我來說更有意義。謝謝!! – blop001

0

這可以例如進行與模運算%的幫助下:

$input = 1..101 
for ($i = 0; $i -lt $input.Count; $i++) 
{ 
    $currentElement = $input[$i] 
    if ($i % 50 -eq 0) 
    { 
     Write-Host "Sleep on element $i" 
     Start-Sleep -Seconds 5 
    } 
} 

此循環將暫停5秒鐘每當$i可以通過50沒有除盡。

+0

您好,感謝您的快速回復! :)。除以50的分數對我來說有點混亂,尤其是當文本文件中身份的總數不會是偶數時。這個想法是從10,003的第一位開始,到達9,950這個數字除以50--然後暫停?在進行到9,900暫停之後再進行9,850暫停等? – blop001

+0

您可以使用您認爲適合您的情況的任何模數值。 50只是一個例子。您輸入的元素總數在這裏並不重要。您正在計算當前循環運行數的模數,而不是元素的總數。 –

相關問題