Запуск командной строки из контекстного меню проводника

По умолчанию рабочей директорией командной строки является либо системная директория C:\Windows\system32, либо директория пользователя C:\Users\user_name. Это очень неудобно, когда надо, чтобы рабочей директорией была совершенно другая директория, например папка находящаяся на рабочем столе или вообще на другом диске.

Конечно можно, используя команды термила, пройти в любую директорию, но это порой трудоёмкий процесс, т. к. нужно придерживаться синтаксиса, учитывать пробелы в имени директорий и т. п..

На много удобней было бы иметь в контекстном меню директории пункт запуска терминала, где рабочей директорией будет выбранная директория, а так же, чтобы можно было запустить терминал ни только с правами текущего пользователя, но и с правами администратора.

Реализацию такой "хотелки" мы сможем сделать с помощью редактора реестра. Итак приступим.

Открываем редактор реестра. Это можно сделать запустив команду "Выполнить" Win + R и прописать команду regedit.

Команда Выполнить

В редакторе реестра раскроем раздел HKEY_CLASSES_ROOT\Directory. Именно с этим разделом и будем шаманить, так как именно он отвечает практически за всё, что связано с директориями.

Откроем раздел HKEY_CLASSES_ROOT\Directory\Background\shell и создадим в нём раздел user_cmd. В разделе HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd создадим строковой параметр MUIVerb и присвоем ему значение Командная строка.

Пункт мы создали. В этом можно убедиться, если кликнуть на пустом месте внутри директории:

Контекстное меню внутри директории

Но этого мало и мы продолжаем.

Если вы помните, то нам нужна возможность запуска терминала с правами текущего пользователя и с правами администратора. Значит для этого нужно сделать вложенное меню для только что созданного пункта. Можно, конечно, сделать пункты подряд, но тогда мы увеличим размер контекстного меню, а на этом хочется сэкономить. Да и полезно узнать, как сделать вложенные пункты.

Для этого в разделе HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd создадим строковой параметр SubCommands. Значение присваивать не будем.

Редактор реестра

В разделе HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd создадим раздел shell и, в только что созданном разделе, создадим раздел default_user, проходим в него HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd\shell\default_user.

В этом разделе создадим строковой параметр MUIVerb и присвоем ему значение Запуск CMD Пользователь.

Редактор реестра

В разделе HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd\shell\default_user создадим раздел command.

В этом разделе пропишем для параметра По умолчанию значение, которое будет являться командой для запуска Командной строки для данной директории: cmd.exe /s /k pushd "%V" && title %V && echo off && cls

Редактор реестра

Впринципе вы можете запустить окно Коммандной строки с правами текущего пользователя и выполнив в нём команду DIR, чтобы посмотреть информацию о каталоге:

Контекстное меню внутри директории   Терминал коммандной строки

Разберём только что прописанную команду, чтобы вы поняли, что она делает.

Собственно сам запуск Командной строки - cmd.exe. А вот далее идут определённые команды.
Ключи /s /k - заданы для того, чтобы терминал не закрылся после выполнения последующих команд.
pushd "%V" - команда pushd устанавливает рабочий каталог и переходит в него. Рабочим каталогом является "%V" - это переменная, которая содержит путь каталога. Его мы и устанавливаем.

А дальше чистый тюнинг.

title %V - установим в заголовок окна путь каталога, чтобы мы знали, где запущен терминал.
echo off - выключаем режим отображения вводимых команд на экран.
cls - очищаем экран.

Знаки && являются объеденением команд с ожиданием выполнения каждой в той последовательности, в которой они записаны.

Итак, мы создали пункт в контекстном меню для запуска терминала с правами текущего пользователя. Теперь перейдём ко второму этапу - создания второго пункта меню запуска терминала с правами Администратора.

Создаём раздел runas в разделе HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd\shell.

Переходим в данный раздел HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd\shell\runas и создаём строковой параметр MUIVerb и присвоем ему значение Запуск CMD Администратор.

Редактор реестра

Далее в разделе HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd\shell\runas создаём раздел command. В данном разделе HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd\shell\runas\command для параметра По умолчанию пропишем значение - cmd.exe /s /k pushd "%V" && title %V && echo off && cls.

Редактор реестра

Вот и создали пункт меню для запуска терминала с правами Администратора

Контекстное меню внутри директории   Терминал коммандной строки

Мы создали пункты меню только для случая, если вы вызвали контекстное меню на свободном месте внутри директории. Если попробовать вызвать контекстное меню на выбранной папке - пунктов не будет. Вот этот нам нужно будет реализовать во второй части.

Все действия практически индентичны, только они происходят уже в разделе HKEY_CLASSES_ROOT\Directory\shell.

Редактор реестра

Для того, чтобы не проделывать всё это вручную, я сделал экспорт реестра для добавления данных пунктов в контекстное меню. К пунктам меню добавлена иконка cmd.

Вы можете скопировать код, вставить в блокноте и сохранить его с расширением .reg или скачать уже готовый файл твика.

Скачать

Вам останется только распаковать архив и запустить tweak_cmd_directory.reg согласившись на слияние.


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd]
"Icon"="cmd.exe,0"
"SubCommands"=""
"MUIVerb"="Командная строка"

[HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd\shell\default_user]
@=""
"Icon"="cmd.exe,0"
"MUIVerb"="Запуск CMD Пользователь"

[HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd\shell\default_user\command]
@="cmd.exe /s /k pushd \"%V\" && title %V && echo off && cls"

[HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd\shell\runas]
"Icon"="cmd.exe,0"
"MUIVerb"="Запуск CMD Администратор"

[HKEY_CLASSES_ROOT\Directory\Background\shell\user_cmd\shell\runas\command]
@="cmd.exe /s /k pushd \"%V\" && title %V && echo off && cls"

[HKEY_CLASSES_ROOT\Directory\shell\user_cmd]
"Icon"="cmd.exe,0"
"SubCommands"=""
"MUIVerb"="Командная строка"

[HKEY_CLASSES_ROOT\Directory\shell\user_cmd\shell\default_user]
@=""
"Icon"="cmd.exe,0"
"MUIVerb"="Запуск CMD Пользователь"

[HKEY_CLASSES_ROOT\Directory\shell\user_cmd\shell\default_user\command]
@="cmd.exe /s /k pushd \"%V\" && title %V && echo off && cls"


[HKEY_CLASSES_ROOT\Directory\shell\user_cmd\shell\runas]
"Icon"="cmd.exe,0"
"MUIVerb"="Запуск CMD Администратор"

[HKEY_CLASSES_ROOT\Directory\shell\user_cmd\shell\runas\command]
@="cmd.exe /s /k pushd \"%V\" && title %V && echo off && cls"
Поделиться