Я пытаюсь настроить новую подсистему Windows для Linux (WSL) для открытия из контекстного меню:

До сих пор я следовал учебнику на http://winaero.com/blog/add-bash-to-the-folder-context-menu-in-windows-10/ и смог добавить его, как на картинке выше. Процесс в основном устанавливается следующим реестром Windows:

[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\openbashhere]
@="Open Bash Here"
"Icon"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,5c,00,41,00,70,00,70,00,44,00,61,00,74,00,61,00,5c,00,4c,00,\
  6f,00,63,00,61,00,6c,00,5c,00,6c,00,78,00,73,00,73,00,5c,00,62,00,61,00,73,\
  00,68,00,2e,00,69,00,63,00,6f,00,00,00

[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\openbashhere\command]
@="cmd.exe /c cd /d \"%V\" && bash.exe"

Здесь проблема в строке "cmd.exe /c cd /d \"%V\" && bash.exe" , я не смог разобраться в команде, чтобы правильно открыть ее в развернутом виде. Я искал и нашел несколько тем об этом:

  1. максимизация окна командной строки
  2. Почему окно командной строки Windows не достигает максимального размера экрана?
  3. Добавление Bash в Ubuntu в Windows 10 в контекстное меню проводника (проблемы)
  4. Как я могу запустить cmd.exe свернутым?

Я попытался сделать эту сложную игру:

cmd.exe /c start /max cmd.exe

Это работает, если я наберу его в диалоговом окне «Выполнить»:

Но если я попытаюсь поместить его в приведенную выше запись реестра, он не будет развернут в развернутом виде:

[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\openbashhere\command]
@="cmd.exe /c start /max cmd.exe /c cd /d \"%V\" && bash.exe"

Позже я также попробовал другой грязный трюк с ярлыком "C:\ProgramData\Microsoft\Windows\Start Menu\cmd.exe.lnk" , который открывает максимизированный cmd, но когда я помещаю его вместо cmd.exe:

[HKEY_CURRENT_USER\SOFTWARE\Classes\Directory\Background\shell\openbashhere\command]
@="\"C:\ProgramData\Microsoft\Windows\Start Menu\cmd.exe.lnk\" /c cd /d \"%V\" && bash.exe"

Windows выдает эту ошибку:

1 ответ1

1

Прочитайте о разделителе &&:

commandA && commandB Запустить commandA , если это удастся, запустить commandB

В вашем @="cmd.exe /c start /max cmd.exe /c cd /d \"%V\" && bash.exe":

  • commandA = start /max cmd.exe /c cd /d \"%V\"
  • commandB = bash.exe

Следовательно, bash.exe запускается из первого / внешнего экземпляра cmd /c (обычно не максимизируется).

Кроме того, прочитайте о заголовке в команде start.

Используйте либо (избежать амперсандов)

@="cmd.exe /c start \"\" /max cmd.exe /c cd /d \"%V\" ^&^& bash.exe"

или, может быть, лучше (пропустите внутренний cmd /c вообще)

@="cmd.exe /c cd /d \"%V\" && start \"\" /max bash.exe"

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