2012-03-12 76 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