Запуск командной строки из контекстного меню проводника
По умолчанию рабочей директорией командной строки является либо системная директория 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"