簡體   English   中英

PowerShell如何管道FOR循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM