2013-08-30 11 views
21

Tôi gặp sự cố với PowerShell khi gọi exe tại đường dẫn chứa dấu cách.Không gian gây ra sự phân chia trong đường dẫn với PowerShell

PS C: \ Windows Services> gọi-khái niệm "C: \ Windows Services \ MyService.exe"

Thuật ngữ 'C: \ Windows' không được công nhận là tên của một lệnh, chức năng , tệp tập lệnh hoặc chương trình có thể hoạt động. Kiểm tra chính tả của tên hoặc nếu đường dẫn được bao gồm, hãy xác minh rằng đường dẫn là chính xác và thử lại.

Dường như nó đang tách trên khoảng cách giữa 'Windows' và 'Dịch vụ'. Bất kỳ ý tưởng làm thế nào để có được vòng vấn đề này?

Trả lời

30

này sẽ làm những gì bạn muốn ?:

& "C:\Windows Services\MyService.exe" 
+1

Ok, mà dường như làm việc nhưng chỉ khi tôi chạy từ dòng lệnh. Nếu tôi đặt nó vào một kịch bản PowerShell sau đó tôi nhận được 'Biểu thức sau' & 'trong một yếu tố đường ống dẫn tạo ra một lỗi đối tượng không hợp lệ'. – jaffa

+2

Xin lỗi vì DID làm việc, sai lầm của tôi. – jaffa

11

Bạn có thể thoát khỏi không gian bằng cách sử dụng dấu ngoặc đơn và một backtick trước không gian:

$path = 'C:\Windows Services\MyService.exe' 
$path -replace ' ', '` ' 
invoke-expression $path 
+0

Vấn đề với giải pháp này là đường dẫn được truyền vào như một đối số và tôi không thể kiểm soát cách nó được thoát. – jaffa

+0

Bạn chỉ có thể thực hiện '-replace' trên biến chứa đường dẫn và thay thế '' bằng ''' –

2

Có một hack tôi đã sử dụng từ Invoke-Expression hoạt động tốt cho tôi.

Bạn có thể thiết lập vị trí hiện tại để con đường với không gian, gọi biểu thức, có được trở lại vị trí trước đây của bạn và tiếp tục:

$currLocation = Get-Location 
Set-Location = "C:\Windows Services\" 
Invoke-Expression ".\MyService.exe" 
Set-Location $currLocation 

này sẽ chỉ hoạt động nếu exe không có bất kỳ khoảng trống trong tên của nó.

Hope this helps

1

Không chắc nếu ai đó vẫn cần nó ... tôi cần phải gọi msbuild trong PowerShell và sau đây làm việc tốt:

$MSBuild = "${Env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe" 

& $MSBuild $PathToSolution /p:OutDir=$OutDirVar /t:Rebuild /p:Configuration=Release