[英]powershell how to pipeline FOR loop
我正在嘗試使用for循環更新數組
$comps = Get-ChildItem $LocalPath -recurse | Select-String -pattern "MyStringFilter" | group path | select name | Foreach {"$($_.Name)".substring(0,"$($_.Name)".IndexOf('.')).substring("$($_.Name)".LastIndexOf('\')+1) }
for ($i = 0; $i -lt $comps.count; $i++) {
if ($comps[$i].substring(0,3) -eq "AAA") {$comps[$i] = "/aaa "+$comps[$i]} else {$comps[$i] = "/bbb "+$comps[$i]}
}
$comps
上面的代碼工作正常,但是當我嘗試使用forEach將其放入管道時,數組變量變為空。
$comps = Get-ChildItem $LocalPath -recurse | Select-String -pattern "MyStringFilter" | group path | select name | Foreach {$_.Name.substring(0,$_.Name.IndexOf('.')).substring($_.Name.LastIndexOf('\')+1) } | foreach { if ($_.substring(0,3) -eq "AAA" ) {$_ = "/aaa "+$_} else {$_ = "/bbb "+$_} }
我錯過了什么? 有什么辦法可以使其工作?
謝謝,
您不能在ForEach-Object
的塊中分配迭代值$_
:
$comps = Get-ChildItem $LocalPath -recurse | Select-String -pattern "MyStringFilter" | group path | select name | Foreach {
$_.Name.substring(0,$_.Name.IndexOf('.')).substring($_.Name.LastIndexOf('\')+1)
} | foreach {
if ($_.substring(0,3) -eq "AAA" ) {
"/aaa "+$_
} else {
"/bbb "+$_
}
}
相反,請執行上述操作,並使要分配的值成為該塊的返回值。 每次迭代的所有返回都組成一個數組,當您執行$comps =
時,賦值一直在該語句的開頭進行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.