2012-08-07 47 views
2

我在PowerShell中遇到了使用cmd.exe執行命令的問題。問題是命令的路徑中有空格。似乎是PowerShell的一個普遍問題。 下面是摘錄:Powershell CMD.exe和路徑中的空間

$base_dir = resolve-path ..\ # this path has spaces in it 
$msdeploy = $base_dir\tools\msdeploy\msdeploy.exe 

cmd.exe /c $("""$msdeploy"" -verb:sync -source:....") 

我需要通過變量的腳本是在一個連續的一體化進程曾經有過的路徑msdeploy決心。

由於空格,命令不會執行。我試圖在""(引號)中包裝命令,但仍然沒有運氣。在這種情況下,如何格式化$msdeploy變量?

回答

2

嘗試調用一切與$()這樣的:

$base_dir = resolve-path ..\ # this path has spaces in it 
$msdeploy = $($base_dir)\tools\msdeploy\msdeploy.exe 

cmd.exe /c $("$($msdeploy) -verb:sync -source:....") 

編輯:讓我感動整個命令進入$ msdeploy變量,並通過轉義引號來調用$ msdeploy。我發現有this有類似問題的鏈接,所以我調整了您的代碼以匹配那裏的工作。

$base_dir = resolve-path ..\ 
$msdeploy = $("`"" + $base_dir.Path + "\tools\msdeploy\msdeploy.exe`" -verb:sync -source:....") 

cmd.exe /c "`"$msdeploy`"" 
+0

不幸的是不起作用。單個'充當文字並且不允許$($ msdeploy)變量解壓 – Chev 2012-08-07 16:16:34

+0

嘗試將$ msdeploy更改爲我在那裏的內容。另外,將單個''''改爲'''' – Nick 2012-08-07 16:45:58

+1

兄弟,節省了我的時間!非常感謝。 – Chev 2012-08-08 07:13:28

2

背滴答「」周圍的命令應該使其工作:

cmd.exe /c "`"$msdeploy`" -verb:sync -source:..." 
+0

感謝您的回覆,沒有工作,但是 – Chev 2012-08-07 13:59:11

+0

這是_is_奇怪。我試着自己設置它,就像你一樣,不同之處在於'$ msdeploy'設置了引號:'$ msdeploy =「$ base_dir \ ...」(以確保它是一個字符串,只是老習慣)。我可以調用'cmd.exe/c「'」$ msdeploy'「-help -verb」'沒有問題。 – 2012-08-08 07:05:41