2009-11-26 107 views
5

我有一個test.bat批處理文件來啓動PowerShell腳本:使用蝙蝠開始PowerShell腳本

@pushd "C:\myscripts" 
powershell .\test.ps1 arg1 "arg2 with space" arg3 
@popd 

腳本test.ps1(位於C:\ myscripts)是一個非常簡單的,如:

# just print out the arguments 
Write-Output ("args count: {0}" -f $args.length) 
$args 

然後我試着啓動test.bat。我應該得到三個參數傳遞給PS1,但我得到了以下結果:

ARGS數:5 ARG1 ARG2 與 空間 ARG3

我預計在腳本什麼,ARGS [0]應該ARG1 args [1]應該是「arg2 with space」,args3 [2]是arg3。我不明白爲什麼腳本實際上有5個參數。

如何將cmd或batch中的參數傳遞給PowerShell?就像這樣:

args count: 3 
arg1 
arg2 with space 
arg3 

回答

7
powershell .\test.ps1 arg1 'arg2 with space' arg3 

powershell .\test.ps1 arg1 """arg2 with space""" arg3 

我想你應該儘量避免使用雙引號CMD已經使用了他們太多,因此這是一個有點很難預測究竟PowerShell中會得到。請記住,這是通過兩個炮彈,因此兩層逃逸/報價。

PowerShell本身對單引號和雙引號沒有太大的區別。至少在這種情況下,差異是無關緊要的。

0

好的。我想我明白了:

@pushd 「C:\ myscripts」。 的PowerShell \ test.ps1 ARG1 'ARG2與空間' ARG3 @popd

單引號字符,而不是雙之一。也許他們在PS中意味着不同的東西。

+0

他們沒有。但是它們對於'cmd'確實意味着不同的東西。 – Joey 2009-11-26 17:16:43