Powershell中的命令行参数

时间:2010-08-02 04:45:05

标签: powershell powershell-v2.0 command-line-arguments

所以问题是,当我运行我的基本脚本简单地镜像什么是在命令行上传递时,参数不会按照我期望的方式分开。

基本代码是:

write-host "`$args`[0`] = $args[0]"
write-host "`$args`[1`] = $args[1]"
write-host "`$args`[2`] = $args[2]"

如果我将脚本称为

./script apples oranges bananas

我得到了

$args[0] = apples oranges bananas[0]
$args[1] = apples oranges bananas[1]
$args[2] = apples oranges bananas[2]

如果它很重要,我在powershell 2.0中这样做

3 个答案:

答案 0 :(得分:3)

您需要将变量包装成$(..),如下所示:

write-host "`$args`[0`] = $($args[0])"
write-host "`$args`[1`] = $($args[1])"
write-host "`$args`[2`] = $($args[2])"

这适用于任何非简单标量变量的表达式:

$date = get-date
write-host "day: $($date.day)"
write-host "so web page length: $($a = new-object Net.WebClient; $a.DownloadString('http://stackoverflow.com').Length)"
write-host "$(if (1 -eq (2-1)) { 'is one' } else {'is not'} )"

答案 1 :(得分:1)

这是我在个人资料中使用的辅助函数:

function Echo-Args
{
    for($i=0;$i -lt $args.length;$i++)
    {
        "Arg $i is <$($args[$i])>"
    }
}

PS > Echo-Args apples oranges bananas
Arg 0 is <apples>
Arg 1 is <oranges>
Arg 2 is <bananas>

答案 2 :(得分:0)

哇,嗯,这很尴尬。

如果你用$ args [0]换行,例如,用双引号,就像我上面那样,它会解释$ args并停止,永远不会进入[],因此打印$ arg,或整个命令行参数数组。