Я бы попробовал следующую строку:
for %a in (.) do title %~na
Или в командном файле вы бы однажды избежали %
s:
for %%a in (.) do title %%~na
Цикл for...do
предназначен только для того, чтобы получить текущий путь к переменной, поскольку вы не можете использовать оператор ~
с переменными окружения, такими как (%cd%
).
Однако, как вы заметили, это не сработает для "Командной строки здесь", так как она выполняется до того, как каталог установлен.
Чтобы обойти это, вам, по сути, придется изменять вызываемую командную строку всякий раз, когда вы используете эту функциональность.
Это контролируется двумя переменными в Реестре, обе являются HKEY_CLASSES_ROOT\Directory
:
HKEY_CLASSES_ROOT\Directory\shell\cmd\command
: этот ключ определяет команду, запускаемую при нажатии Shift + правой кнопкой мыши на значке каталога / папки.
HKEY_CLASSES_ROOT\Directory\Background\shell\cmd\command
: этот ключ определяет команду, запускаемую при нажатии клавиши Shift + щелчок правой кнопкой мыши где-нибудь в открытом окне проводника.
По умолчанию оба эти значения по умолчанию установлены в cmd.exe /s /k pushd "%V"
, что откроет окно командной строки и изменит каталог на параметр, переданный как %V
Таким образом, чтобы это работало, вам нужно отредактировать эти два значения по умолчанию и добавить команду сверху, слегка измененную. Просто установите оба значения по умолчанию на это:
cmd.exe /s /k "pushd ""%V"" && for %%A in (%V) do @title %%~nA"
Обратите внимание на двойные кавычки, чтобы правильно избежать их, поскольку все заключено в одну пару кавычек, чтобы сгруппировать все для параметра cmd.exe s /k
. Знак @
скрывает команду от показа внутри окна команд.
Это работает для меня, но есть одна небольшая причуда: если имя вашего каталога содержит более одной точки, например one.two.three
, это будет называть заголовок one.two
.
Также имейте в виду, что название не будет обновляться, когда вы CD в другой каталог. Заставить это работать было бы немного сложнее (или, возможно, даже невозможно; не пытался).