2

В Windows 10 я столкнулся со следующей проблемой: при использовании + для запуска 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 ответ1

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 Window Host хоста conhost.exe . (Если запускается из контекстного меню проводника Windows, появляется его собственный экземпляр conhost.exe).

Поэтому все последующие множественные пробелы (без двойных кавычек) считаются избыточными разделителями элементов и сокращаются до единственного.

Конечно, использования одинарных кавычек внутри PowerShell должно быть достаточно:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .