将“在此处打开命令窗口”标题设置为调用它的目录

将“在此处打开命令窗口”标题设置为调用它的目录

我知道如何在常规批处理文件中将标题设置为当前目录。

我想对当您从 Windows 文件夹执行“在此处打开命令窗口”时打开的 cmd 窗口执行此操作(自动)。

我知道你可以在任何 cmd 启动时运行批处理文件我也看到了答案获取目录名称但是尝试获取目录名只会提供该文件所在的直接名称,而不是“在此处打开命令窗口”所在的autorun.cmd目录名。cd

似乎在autorun.cmd调用时,它还没有关于将更改为调用“在此处打开命令窗口”的目录的信息。是这样吗?或者还有什么方法可以将标题自动更改为当前目录?

在此处输入图片描述

答案1

我会尝试以下行:

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\commandShift:此键定义当您右键单击目录/文件夹图标时要运行的命令。

HKEY_CLASSES_ROOT\Directory\Background\shell\cmd\commandshift:此键定义在打开的资源管理器窗口中的某处单击右键时要运行的命令。

默认情况下,这两个默认值都设置为cmd.exe /s /k pushd "%V",这将打开一个命令窗口并将目录更改为作为传递的参数%V

因此,要使其正常工作,您必须编辑这两个默认值并附加上面的命令(略作修改)。只需将两个默认值都设置为:

cmd.exe /s /k "pushd ""%V"" && for %%A in (%V) do @title %%~nA"

请注意双引号,以便正确地转义它们,因为所有内容都括在一对引号中,以便对所有内容进行分组命令执行程序/k参数。其中的@将隐藏命令,使其不显示在命令窗口中。

这对我来说有效,但有一个小问题:如果您的目录名称包含多个点,例如,这将仅one.two.three命名标题。one.two

还要记住,标题将不是当您使用 CD 转到另一个目录时,更新。要使它工作起来会更加棘手(或者甚至不可能;没有尝试)。

答案2

受这个问题的启发,我在 Windows 上的命令行添加了一些有趣的功能:命令cdnpushdn以及popdn(尾随= 首字母缩写新的或者命名甚至废话或其他任何内容)对应于cdpushdpopd命令。那些命令有助于使我的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

很高兴分享我的喜悦。

答案3

现在可以在任何命令之后自动保持更新,而无需重新定义“cd”等。请参阅将命令提示符更改为仅显示当前目录名称

相关内容