在 Windows 10 中,我遇到了以下问题:当使用Shift+Right-click启动某个文件夹中的 powershell 时,如果文件夹名称包含两个连续的空格,我总是会收到错误。如果您导航到
"D:\foo bar"
在资源管理器中,然后使用上述方法打开 PS,您会收到错误,并且 PS 会在文件夹中启动C:\WINDOWS\system32>
。 有没有办法解决这个问题?
我知道文件夹名称中有两个连续的空格通常是没有意义的(有些人可能会认为即使一个空格也太多了),但这不是这里的问题。
编辑:这是我收到的错误的粗略翻译(用 表示<translation></translation>
)(以我的系统语言打印)。我认为这没什么帮助,因为您可以轻松地自己尝试:
Set-Location : <translated> The path "D:\foo bar" cannot be found because it does not exist:.
In Row:1 Character:1</translation>
+ Set-Location -literalPath 'C:\Users\user\Desktop\foo bar'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (D:\foo bar:String) [Set-Location], ItemNotFoundE
xception
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand
答案1
这是转义问题。请参见我的HKCR\Directory\shell
运行PowerShell的注册表子项的设置:
==> reg query "HKCR\Directory\shell\PowerShell" /S
HKEY_CLASSES_ROOT\Directory\shell\PowerShell
(Default) REG_SZ PowerShell here
HKEY_CLASSES_ROOT\Directory\shell\PowerShell\command
(Default) REG_SZ powershell.exe -noexit -command Set-Location '"%V"'
并以管理员身份运行 PowerShell:
==> reg query "HKCR\Directory\shell\runasPowerShell" /S
HKEY_CLASSES_ROOT\Directory\shell\runasPowerShell
HasLUAShield REG_SZ
(Default) REG_SZ PowerShell here as administrator
HKEY_CLASSES_ROOT\Directory\shell\runasPowerShell\command
(Default) REG_SZ Powershell Start-Process PowerShell -verb runas -ArgumentList
'-noexit', 'Push-Location -literalPath ''""""%V""""'''
您可以轻松修改上述设置HKLM\SOFTWARE\Classes\Directory\background\shell
。
解释:PowerShell.exe
解析自己的命令行预标记通过控制台窗口主机过程conhost.exe
。 (如果从 Windows 资源管理器上下文菜单运行然后产生它自己的实例conhost.exe
)。
因此,所有随之而来的多重空间(未通过双引号转义)被视为冗余项目分隔符,并且压缩对唯一一个。
当然,使用单引号里面PowerShell 基本上就够了……