2010-08-02 67 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>