2010-08-02 71 views
1

所以问题是,当我运行我的基本脚本,它只是简单地反映在命令行上传入的内容时,参数不会按照我期望的方式分开。Powershell中的命令行参数

的基本代码是:

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

回答

0

哇,那么,尴尬。

如果你用双引号包装$ args [0],就像我上面做的那样,它会解释$ args并停止,永远不会到达[],因此打印出$ arg或者整个命令行参数数组。

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

这里只是一个辅助功能我在配置文件中使用:

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>