PowerShell中使用start命令Tab补全自动加反引号报错如何解决?
报错原因
- PowerShell 默认的 Tab 路径补全会对
[]这类通配符字符自动加反引号转义,但补全后路径用单引号包裹,单引号字符串内的反引号不会被识别为转义符,实际传给命令的路径会携带多余反引号,导致系统找不到对应文件。 - 你用的
start是Start-Process命令的别名,该命令默认将传入的路径当做通配符模式解析,就算手动删除反引号,方括号也会被当做通配符规则处理,依然会匹配失败。
禁止Tab补全自动转义方括号的设置方法
- 首先打开 PowerShell 用户配置文件,执行命令:
notepad $PROFILE
如果提示文件不存在,先执行下方命令创建文件后再重新打开:New-Item -Path $PROFILE -ItemType File -Force - 在打开的配置文件末尾添加以下代码:
Set-PSReadLineKeyHandler -Key Tab -ScriptBlock { param($key, $arg) $currentInput = $null [Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$currentInput, [ref]$null) $completions = [System.Management.Automation.CommandCompletion]::CompleteInput($currentInput, $currentInput.Length, $null) if ($completions.CompletionMatches.Count -gt 0) { $completionText = $completions.CompletionMatches[0].CompletionText # 移除路径补全自动添加的方括号转义反引号 $completionText = $completionText -replace '`(\[|\])', '$1' [Microsoft.PowerShell.PSConsoleReadLine]::Replace(0, $currentInput.Length, $completionText) } }
- 保存文件后,执行
. $PROFILE让配置立即生效,之后所有新打开的 PowerShell 窗口的 Tab 补全都不会再自动给方括号加反引号转义。
额外说明
如果不想修改补全规则,也可以在使用 start 命令时手动加上 -LiteralPath 参数,强制命令将路径当做字面量解析,不需要转义即可正确识别带方括号的文件,示例:start -LiteralPath '.\[test].txt'
内容的提问来源于stack exchange,提问作者HauVo
相关产品推荐
相关产品推荐

