【问题标题】:Powershell accessing multiple parameters in a for loopPowershell在for循环中访问多个参数
【发布时间】:2015-01-27 11:15:27
【问题描述】:

嗨,我对 powershell 很陌生,我正在编写一个接受多个参数的脚本。这些参数在文件内的 for 循环中被访问。 它看起来像这样

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


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

}

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

【问题讨论】:

    标签: powershell for-loop parameter-passing


    【解决方案1】:

    编辑:感谢 Duncan 指出这一点,变量中缺少 $。

    试试这个:

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

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

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

    【讨论】:

    • 您需要在第一行添加一个$$args.Length 我尝试为您添加它,但是当您改进答案时它被覆盖了。
    【解决方案2】:

    首选的 Powershell 方式是使用绑定参数,像这样;

    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>]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-11
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 2020-10-11
      • 2020-04-20
      • 1970-01-01
      相关资源
      最近更新 更多