1. 程式人生 > >運用pipeline來迴圈執行每一次操作

運用pipeline來迴圈執行每一次操作

在powershell中有很多命令都接受指令碼為引數。Where-Object 命令就是一個例子.

我展示這個例子:

Get-Process | Where-Object {$_.VirtualMemorySize -gt 104857600} 

其實這行程式碼可以為列表中的每一項執行一段指令碼,在比如如下示例,我們可以通過管道去一個個傳遞:

PS C:/WINDOWS/system32> 1..10 | foreach { $_ * 2 }
2
4
6
8
10
12
14
16
18
20

它自己不是很有用,但是這項技術適合很多地方。例如,假設你要一個目錄下的所有第一行包含#backup文字檔案到c:backups目錄,可以這麼做:

dir *.txt | foreach { if ((Get-Content $_ -totalCount 1) -eq "#backup") { copy $_ c:/backups } }

這行以dir (或者Get-ChildItem) 開始,然後把結果傳遞給foreach命令。foreach 命令對每個檔案執行大括號裡面的指令碼。

這段指令碼讀取每個檔案的第一行(通過 Get-Content, 傳遞 -totalCount 1來只讀取第一行), 然後和字串#backup進行比較, 如果匹配,就複製這個檔案。