2012-08-01 27 views
1

我知道這一定很簡單,但我無法弄清楚如何做到這一點。我正在通過XML讀取一個變量中的字符串。該變量稱爲$軟件,它的值是Java的Flash讀本「閃存(IE)」方括號或引號打破PowerShell命令

然後,這是從一個命令行陸續推出:

C:\Deployment\Ninite\NiniteOne.exe /select $xmlsoftware $installtype /remote file:"$NiniteTargets" $shortcuts $autoupdate /cachepath "$NiniteCache" $userinterface "$NiniteLog" 

當它到達的命令是打破了「 Flash(IE)「部分。我認爲括號在變量中發生了一些事情,但我不確定。任何幫助,將不勝感激。

+0

,什麼是你得到確切的錯誤,當您嘗試運行命令從Powershell而不是cmd? – SpellingD 2012-08-01 14:40:02

回答

1

首先:爲什麼委託cmd只是爲了運行一個程序? PowerShell是一個外殼,太:

blabla.exe /select $software /silent 

但問題是有點比這更復雜,即使參數解析去除cmd的併發症:

PS> $software = 'Java Flash Reader "Flash (IE)"' 
PS> .\echoargs.exe /select $software /silent 
arg 1: /select 
arg 2: Java Flash Reader Flash 
arg 3: (IE) 
arg 4: /silent 

您可以替換引號與\"值,使其工作,顯然是:

PS> $software = $software -replace '"', '\"' 
PS> .\echoargs.exe /select $software /silent 
arg 1: /select 
arg 2: Java Flash Reader "Flash (IE)" 
arg 3: /silent 
+0

奇妙的想法 - 只是嘗試過,但它仍然完全一樣。這幾乎就像忽略了引號或將它們撕掉一樣。 – Trinitrotoluene 2012-08-01 12:08:01

+0

由於某種原因,這仍然不適用於我,我得到了同樣的錯誤。我正在運行的確切命令我將在主文章 – Trinitrotoluene 2012-08-01 12:37:47

+0

中進行更新。您應該使用在被調用的應用程序中到達時輸出參數的東西進行調試。在不知道其他價值的情況下,很難從這裏看到。我的'echoargs'是'class E {static void Main(string [] args){int i = 1; foreach(args中的var s){System.Console.WriteLine(「arg {1}:{0}」),args [I-1],我++);}}}'。 'file:「$ NiniteTargets」'可能是一個可能會破壞事物的候選人。 PowerShell對嵌入參數中的引用有點挑剔,通常你根本不需要引用變量。 – Joey 2012-08-01 12:48:10

0

嘗試聲明$software這樣的:

$software = $('Java Flash Reader "Flash (IE)"') 

另一種選擇是嘗試聲明是這樣的:

$software = "Java Flash Reader `"Flash `(IE`)`"" 

添加回抽動逃脫("