PowerShell 在名称中含有两个空格的文件夹中抛出错误

PowerShell 在名称中含有两个空格的文件夹中抛出错误

在 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\backg‌​round\shell

解释PowerShell.exe解析自己的命令行预标记通过控制台窗口主机过程conhost.exe。 (如果从 Windows 资源管理器上下文菜单运行然后产生它自己的实例conhost.exe)。

因此,所有随之而来的多重空间(未通过双引号转义)被视为冗余项目分隔符,并且压缩对唯一一个。

当然,使用单引号里面PowerShell 基本上就够了……

相关内容