2014-10-28 67 views
4

我有一個批處理腳本,將由一個不受我控制的外部進程運行。外部進程可以爲批處理腳本提供可變數量的參數。然後我想將這些變量傳遞給一個powershell腳本。問題是,是,一些變量的樣子:如何將包含點的批處理參數傳遞到PowerShell腳本中?

-Dfoo.bar =巴茲

PowerShell的出於某種原因打破它變成有兩個參數。在命令行上,我可以在arg周圍添加引號並將其稱爲一天。但是,我將如何批量通過這種方式呢?這裏是我的腳本:

@echo off 
SET CMD=C:\Scripts\foo.ps1 

PowerShell.Exe -Command "%CMD%" %* 

我注意到這個問題是非常相似的this one。在這裏他逃避了$角色。我試着做點和/或破折號字符類似的東西,但沒有運氣。任何人有任何想法?

+0

我在mvn命令中遇到了同樣的問題:'mvn ... -DgroupId = xy ...'並且它產生了一個奇怪的錯誤*未知生命週期階段「.y」*。那是我決定使用cmd的那一刻...... – 2015-12-29 15:34:20

回答

1

像這樣的東西可能會奏效:

@echo off 

set "CMD=C:\Scripts\foo.ps1" 
set "ARGS=%*" 
set "ARGS=%ARGS: =' '%" 

PowerShell.Exe -Command "%CMD%" '%ARGS%' 

示範:圍繞論點

C:\>type test.cmd 
@echo off 

set "CMD=C:\test.ps1" 
set "args=%*" 
set "args=%args: =' '%" 
powershell -Command "%CMD%" '%args%' 

C:\>type test.ps1 
$args | % { $_ } 

C:\>test.cmd -Dfoo.bar=baz -something 
-Dfoo.bar=baz 
-something

單引號防止PowerShell與做時髦事情那個論點。通過用' '替換參數列表中的空格,可以在一個參數之後和下一個參數之前放置單引號。變量周圍的「外部」單引號在第一個參數和最後一個參數之前添加缺少的引號。

C:\>type test2.cmd 
@echo off 
set "args=%*" 
echo %args% 
set "args=%args: =' '%" 
echo %args% 
echo '%args%' 

C:\>test2.cmd -Dfoo.bar=baz -something 
-Dfoo.bar=baz -something 
-Dfoo.bar=baz' '-something 
'-Dfoo.bar=baz' '-something'
+0

這就是我要使用的,儘管如果其中一個參數有一個空格,我認爲它不會起作用。 :( – 2014-10-29 13:51:45

+0

問題是,CMD將'=',','和';'視爲[分隔符](http://ss64.com/nt/syntax-esc.html),就像空格一樣,所以沒有簡單和完整的處理方式,你需要一個全面的解析器來處理所有的案例 – 2014-10-29 19:16:01

1

要將事情作爲文字傳遞,可以將它們用單引號括起來。我的建議是爲你的論點做這件事,然後在PowerShell中將它們分解一次,並將它們濺到你的命令中。

@echo off 
SET CMD=C:\Scripts\foo.ps1 

PowerShell.Exe -Command "%CMD%" '%*' 
在PowerShell中

然後:

Param($PassedArgs) 
$SplitArgs = $PassedArgs.trim("'").split(" ") 
SomeCommand @SplitArgs 
3

如果你打電話從CMD腳本,它工作得很好原樣:

C:\>.\foo.bat -Dfoo.bar=baz 
args are -Dfoo.bar=baz 

要當您從PowerShell中的批處理腳本解決該問題使用stop parsing operator --%如:

C:\ PS> .\foo.bat --% -Dfoo.bar=baz 
args are -Dfoo.bar=baz 
+1

哪個PowerShell版本?我有OP描述PowerShell v3的確切行爲,從CMD運行批處理腳本。 – 2014-10-29 08:10:02

+0

對Powershell 2.0進行編程,因爲我認爲讓我的隊友從他們的默認值升級會有點多,就像@AnsgarWiechers所說的,即使是從cmd運行它也會出現這種行爲,另外,不幸的是, - %技巧不起作用。:(聽起來像是微軟因爲遇到這個問題而添加的東西。 – 2014-10-29 13:50:38

+0

@AnsgarWiechers我在Win 8.1上運行v4。 – 2014-10-29 15:25:13

相關問題