空间导致PowerShell分离路径

时间:2013-08-30 15:57:38

标签: powershell

在包含空格的路径上调用exe时,我遇到了PowerShell的问题。

PS C:\ Windows服务> invoke-expression“C:\ Windows Services \ MyService.exe”

术语“C:\ Windows”未被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。

似乎是在“Windows”和“服务”之间的空间上分裂。知道怎么解决这个问题吗?

15 个答案:

答案 0 :(得分:51)

这会做你想要的吗?:

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

答案 1 :(得分:15)

您可以在空格前使用单引号和反引号来转义空格:

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

答案 2 :(得分:8)

"&'C:\Windows Services\MyService.exe'" | Invoke-Expression

通过https://www.vistax64.com/powershell/52905-invoke-expression-exe-has-spaces-its-path.html

答案 3 :(得分:7)

不确定是否有人仍然需要它...我需要在powershell中调用msbuild并且以下工作正常:

$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

答案 4 :(得分:3)

由于Invoke-Expression对我来说很好用,所以我已经使用了黑客。

您可以将当前位置设置为包含空格的路径,调用表达式,返回到之前的位置并继续:

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

只有在exe名称中没有空格时才会有效。

希望这有帮助

答案 5 :(得分:2)

在2018年的Windows10上使用Powershell,对我有用的只是用简单引号" 代替双引号' 。根据答案中的建议,在空格前添加反引号可以解决问题。

答案 6 :(得分:0)

对于任何带有空格的文件路径,只需将它们放在双引号中即可在Windows Powershell中使用。例如,如果要转到Program Files目录,而不是使用

PS C:\> cd Program Files

这将导致错误,只需使用以下命令即可解决问题:

PS C:\> cd "Program Files"

答案 7 :(得分:0)

请使用此简单的衬纸:

Invoke-Expression "C:\'Program Files (x86)\Microsoft Office\root\Office16'\EXCEL.EXE"

答案 8 :(得分:0)

尝试此操作,简单且无需太多更改:

调用表达式“'C:\ Windows Services \ MyService.exe'”

在路径的开头和结尾使用单引号。

答案 9 :(得分:0)

这对我有用:

$scanresults = Invoke-Expression "& 'C:\Program Files (x86)\Nmap\nmap.exe' -vv -sn 192.168.1.1-150 --open"

答案 10 :(得分:0)

可以使用.点运算符。

. "C:\Users\user\AppData\Local\Programs\Microsoft VS Code\bin\code.cmd"

Start-Process命令

Start-Process -PSPath "C:\Users\user\AppData\Local\Programs\Microsoft VS Code\bin\code.cmd"

或使用ProcessStartInfoProcess

$ProcessInfo = New-Object -TypeName System.Diagnostics.ProcessStartInfo
$ProcessInfo.FileName = 'C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe'
if($Admin){ $ProcessInfo.Verb = 'runas' }
$ProcessInfo.UseShellExecute = $false

$CommandParameters = '-noexit -noprofile -command Set-Location -LiteralPath c:\; $host.ui.RawUI.WindowTitle = ''[{0}] PS''; Set-PSReadlineOption -HistorySaveStyle SaveNothing;' -f $Cred.UserName
$ProcessInfo.Arguments = $CommandParameters
$ProcessInfo.Domain = ($Cred.UserName -split '\\')[0]
$ProcessInfo.UserName = ($Cred.UserName -split '\\')[1]
$ProcessInfo.Password = $Cred.Password

$ProcessObject = New-Object -TypeName System.Diagnostics.Process
$ProcessObject.StartInfo = $ProcessInfo
$ProcessObject.Start() | Out-Null

答案 11 :(得分:0)

简单的把路径放在cd前面的双引号里,像这样:

<块引用>

cd "C:\Users\MyComputer\Documents\Visual Studio 2019\Projects"

答案 12 :(得分:0)

  1. 输入命令进入C盘根目录
<块引用>

C:

  1. 输入cd,然后按Tab 键,它将在所有可用位置之间切换,并在到达所需位置时按回车< /li>
<块引用>

cd {press tab}

答案 13 :(得分:0)

对我有用的(我需要创建 MySQL 转储的路径)是将目录放在 6 个双引号之间,如下所示:

$path = """C:\Path\To\File"""

答案 14 :(得分:-1)

只需放置${yourpathtofile/folder}
PowerShell不计算空格,而是告诉PowerShell考虑包括空格在内的整个路径,请在 $ {}

之间添加路径