Установите заголовок "open command window here" в качестве каталога, из которого он был вызван
Я знаю, как установить заголовок в качестве текущего каталога в обычном пакетном файле.
Я хочу сделать это для окна cmd, которое открывается, когда вы делаете "окно командной строки здесь" из папки Windows (автоматически).
Я знаю, что вы можете запустить командный файл при запуске любого cmd, и я видел ответы, чтобы получить имя каталога, но попытка получить имя каталога дает вам только прямое имя, где это autorun.cmd
файл находится в, а не в каталоге, в котором "открыть окно команд здесь" cd
с в.
Кажется, что в то время autorun.cmd
вызывается, но у него еще нет информации о каталоге, который изменится в зависимости от того, из какого "открытого командного окна здесь" было вызвано. Это тот случай? Или все же есть способ автоматически изменить заголовок на текущий каталог?
3 ответа
Я бы попробовал следующую строку:
for %a in (.) do title %~na
Или в командном файле вы избежите %
один раз:
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./k
параметр. @
там будет скрыта команда от показа в окне команды.
Это работает для меня, но есть одна небольшая причуда: если имя вашего каталога содержит более одной точки, например one.two.three
, это назовет название one.two
только.
Также имейте в виду, что заголовок не будет обновляться, когда вы CD в другой каталог. Заставить это работать было бы немного сложнее (или, возможно, даже невозможно; не пытался).
Вдохновленный вопросом, я добавил забавную функциональность в командную строку в Windows: псевдо- команды cdn
, pushdn
а также popdn
(завершающий N = аббревиатура новый или именование или даже отсутствие смысла или что-то еще), соответствующий cd
, pushd
а также popd
команды. Эти псевдо- команды помогают сохранить мой cmd
заголовок окна параллельно cmd
текущий путь к каталогу выглядит следующим образом:
current directory window title
------------------ --------------
X:\subpath\subfold X:\ ..\subfold
X:\folder X:\folder
X:\ X:\
для любого привода X:
и произвольная глубина subpath
,
Пример кода: cdn.bat
помещается в любую папку, указанную в path
переменная окружения.
@rem cdn.bat
@rem change directory (and drive) || abort script processing in case of bad success
@cd /D %* || @goto :eof
@rem eliminate (if any in %*) trailing backslashes, surrouding double-quotes
@rem and/or (combined) symbols to current, parent or root directory (., .., \)
@call :window_title "%CD%"
@rem or, to title window to bare folder name, use:
@rem @for /F "tokens=*" %%G in ("%CD%") do @title %%~nG%%~xG
@goto :eof
:window_title
@if "%~p1%~n1%~x1" == "\%~n1%~x1" (
@rem window title to 'X:\folder' on highest-level path or to 'X:\' on drive root
@title %~d1%~p1%~n1%~x1
) else (
@rem window title to 'X:\...\folder' otherwise (i.e. nor root, nor highest-level)
@title %~d1^\ ..^\%~n1%~x1
)
@exit /B
Удовольствие, разделяющее мой восторг
Теперь возможно автоматически обновляться после любой команды, без переопределения "cd" и т. Д. См. " Изменение командной строки", чтобы отображалось только имя текущего каталога