2013-04-22 170 views
0

在繼續之前,我對Powershell的體驗僅爲2天。cmd call to powershell「您必須在' - '運算符的右側提供值表達式

我想從命令行中添加四個參數來調用PowerShell腳本。 powershell腳本只是清理一個CSV文件,並在每個清理階段製作一份文件的副本。

的變量在腳本abcd涉及到新的文件名(包括完整的地址)。

PowerShell腳本

param(
    [string]$a, 
    [string]$b, 
    [string]$c, 
    [string]$d 


) 



Get-Content $a | ForEach-Object { $_ -replace """""""""""","""""" } | Set-Content $b -Force 
Get-Content $b | ForEach-Object { $_ -replace """""""","""" } | Set-Content $c -Force 
Get-Content $c | ForEach-Object { $_ -replace """""","" } | Set-Content $d -Force 

命令腳本

命令下面的腳本是什麼,我想在cmd運行(注:我已經採取了真正的地址)。

powershell.exe '\\somefileaddress\CleanData.ps1' 
-a "\\someaddress\DrFA-C.csv" 
-b "\\someaddress\DrFA-C_2.csv" 
-c "\\someaddress\DrFA-C_3.csv" 
-d "\\someaddress\DrFA-C_4.csv" 

錯誤消息我得到的是:

你必須提供在右手側的值表達式「 - 」操作。

回答

2

我相當確定問題不在於您的腳本,而在於您如何調用它。這對我的作品(不包括所插入爲清晰起見,新行):

powershell.exe -Command "& '\\somefileaddress\CleanData.ps1' 
-a '\\someaddress\DrFA-C.csv' 
-b '\\someaddress\DrFA-C_2.csv' 
-c '\\someaddress\DrFA-C_3.csv' 
-d '\\someaddress\DrFA-C_4.csv'" 
1

您正在使用雙引號,這使其成爲可擴展字符串(解析器將在字符串中查找Powershell運算符,並嘗試在解析過程中調用這些運算符)。 - 是一個Powershell操作符,所以它認爲你正在做某種減法操作。

切換到單引號告訴它,你希望字符串解釋字符串。

0

不聽起來像這樣的回答解決了這個問題,具體而言,只是在情況下,它可以幫助別人的某一天:

我運行在安裝了PowerShell v2(Windows 7的默認版本)的Windows 7計算機上爲PowerShell v5編寫的腳本時出現此錯誤消息。這是一個非常複雜的界限,它的編寫方式與老版本的PowerShell並沒有很好的結合。

運行這段代碼在PowerShell中:$PSVersionTable.PSVersion.Major如果返回2(或者甚至3?),你可以嘗試通過安裝this Windows更新升級的PowerShell版本。

相關問題