Powershell访问for循环中的多个参数

时间:2014-11-28 19:08:29

标签: powershell for-loop parameter-passing

您好我是PowerShell的新手,我正在编写一个接受多个参数的脚本。这些参数在文件内的for循环中被访问。 它看起来像这样

$numOfArgs = args.Length
for ($i=3; $i -le $numOfArgs; $i++)
{


   write-host "folder: $args[$i]"
   # does something with the arguments

}

但是,输出作为一个整体给出了所有参数,而不仅仅是数组中指定的一个参数作为数组元素?谁能告诉我这里的错误在哪里?谢谢!

2 个答案:

答案 0 :(得分:2)

编辑:感谢Duncan指出这一点,错过了一个变量中的$。

试试这个:

$numOfArgs = $args.Length
for ($i=3; $i -le $numOfArgs; $i++)
{
   write-host "folder: $($args[$i])"
   # does something with the arguments
}

将变量放在字符串中时,将评估变量,而不是整个表达式。因此,用$()围绕它,Powershell将评估整个表达式。

换句话说,仅评估$args而不是$args[$i]

答案 1 :(得分:1)

首选的Powershell方法是使用诸如此类的bind参数;

param(
  [Parameter(Mandatory=$true)][string[]]$Paths
)

# not sure why we're skipping some elements
$Paths | foreach-object { write-host "folder: $_" }

您可以像这样指定一个数组或参数;

.\myScript.ps1 -Paths c:\,c:\Users\,'c:\Program Files\'

通过这种方式,它可以与-argument TAB完成一起使用,甚至可以使用get-help cmdlet简要介绍您的用法。

get-help .\myscript.ps1
myScript.ps1 [-Paths] <string[]> [<CommonParameters>]