我有這個代碼:
Get-ChildItem FOLDERNAMEHERE *.png| ForEach-Object { $_.Name } > fileNames.txt
它列印出檔案名串列,我想將其更改為僅列印出數字索引而不是名稱。
uj5u.com熱心網友回復:
1要輸出以(替換$i = 0為$i = -1以 開頭)開頭的序列號0:
Get-ChildItem FOLDERNAMEHERE *.png |
ForEach-Object -Begin { $i = 0 } -Process { ( $i) }
請注意,該變數$i在此命令之后仍然存在,并且如果它在運行命令之前預先存在,則有效地更改它,因為傳遞的腳本塊ForEach-Object直接在呼叫者的范圍內運行。
增量賦值操作 ( ) 被包裹起來,(...)以便也輸出增量值(賦值陳述句默認不產生輸出)。
作為旁白:
GitHub 問題 #13772建議引入用于管道的自動索引變數,例如
$PSIndex,這將簡化解決方案:Get-ChildItem FOLDERNAMEHERE *.png | ForEach-Object { $PSIndex 1 }
使用范圍運算子..的非流式替代方案:
if ($count = (Get-ChildItem FOLDERNAMEHERE *.png).Count) {
1..$count
}
注意:非流式處理意味著Get-ChildItem呼叫的結果是預先完整收集的,以便確定序列號的上限。
類似地,1..$count范圍操作在開始產生可見輸出之前預先收集陣列中范圍端點之間的元素。請參閱評論進行討論。
換句話說:ForEach-Object如果Get-ChildItem命令產生大量輸出物件并且您希望盡快開始發出序列號,請使用基于流的解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/474168.html
