Powershell实现将管道数组转换为命令

时间:2012-03-12 15:13:14

标签: powershell

我正在使用以下Powershell命令将一个用户的Mercurial.ini文件复制到另一个用户的个人资料中:

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

效果很好。但是,我想以这样的方式编写它,以便我可以执行以下操作,预先指定用户并将它们输入到复制命令中:

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

但是,上述方法无效。是否有一种优雅的方式来实现我想要做的事情?

1 个答案:

答案 0 :(得分:3)

这样的东西?

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

,(“benm”,“alex”)语法使得来自管道的输入成为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管道将自动将数组和集合“展开”到对象流中,但对于嵌套数组只有一个深度。通过使其成为2D数组,它“展开”第一级,并通过管道文件完整地传递嵌套数组。