2012-03-12 72 views
1

我使用下面的PowerShell命令,以一個用戶的Mercurial.ini文件複製到其他用戶的個人資料:Powershell的實施管陣列到命令

> copy $env:USERPROFILE\..\benm\Mercurial.ini $env:USERPROFILE\..\alex\Mercurial.ini 

行之有效。不過,我想它寫在諸如方式,這樣我可以做一些像下面,在copy命令指定用戶的前面和管道它們:

> "benm","alex" | copy "$env:UserProfile\..\$_[0]\Mercurial.ini" "$env:UserProfile\..\$_[1]\Mercurial.ini" 

然而,上述沒有按」工作。有沒有一種優雅的方式來實現我想要做的事情?

回答

3

像這樣?

,("benm","alex") | 
foreach {copy "$env:UserProfile\..\$($_[0])\Mercurial.ini" "$env:UserProfile\..\$($_[1])\Mercurial.ini"} 

的,(「benm」,「亞歷克斯」)語法使得從管道輸入的2D陣列

PS C:\> $x = ,("benm","alex") 
PS C:\> $x[0] 
benm 
alex 
PS C:\> $x[0][0] 
benm 
PS C:\> $x[0][1] 
alex 

的Powershell的管道會自動「UNROLL」數組和集合到流對象,但嵌套數組只有一個深度。通過將其設置爲二維數組,它將「展開」第一層,並將完整的流水線數組通過管道傳遞。

+1

我需要編寫$($ _ [0])和$($ _ [1])使其在我的盒子中工作... – 2012-03-12 15:39:28

+0

好catch.That是在字符串參數中使用數組元素的結果。您必須使用子表達式來獲取數組元素才能展開。 – mjolinor 2012-03-12 15:44:46

+0

你可能想解釋',()'在做什麼。這是一個巧妙的技巧。 – 2012-03-12 16:15:20