2016-11-10 70 views
0

我試圖從我的批處理文件傳遞變量到Powershell發佈到數據庫,並且一切正常,除非變量是一個帶空格的字符串,Powershell將它拆分爲多個變量。Powershell拆分變量到多個

這裏是我的批處理文件的代碼:

PowerShell -NoProfile -ExecutionPolicy Bypass -file C:\TEMP\api.ps1 %CustomerCode% %OrderNumber% %CompanyName% 

這裏是我的PowerShell代碼:

param($customerCode, $orderNumber, [string]$CompanyName) 
Write-Output $CompanyName 

$CompanyName應該等於Test Company,PowerShell的將輸出Test

任何想法我做錯了什麼?

+0

您是否嘗試過報價? – Squashman

+0

如果我像這樣在XML中設置節點的變量,我該怎麼做? 'for/f「tokens = 2delims = <>」%% i in('type * .xml^| find「CompanyName」')do set「CompanyName = %% i」' –

+0

這與它無關。將參數傳遞給可執行文件時使用引號。我一生中使用過的每一個控制檯程序總是使用引號來保護空間。 – Squashman

回答

0

爲了安全地從cmd.exe傳遞環境變量的引用(從命令行或批處理文件)作爲命令行參數,將它們括在"..."如下(爲簡潔起見省略參數-NoProfile -ExecutionPolicy Bypass):

powershell -file "C:\TEMP\api.ps1" "%CustomerCode%" "%OrderNumber%" "%CompanyName%" 

如果沒有"作爲分隔符,PowerShell將無法區分單個參數與多個空格分隔參數中嵌入的空格,並且值Test Company將被解釋爲參數,Test(綁定到$CompanyName i在你的情況下)和Company(由你的腳本解除綁定)。