在 Windows CMD 提示符中仅显示当前目录名称(而不是完整路径)

在 Windows CMD 提示符中仅显示当前目录名称(而不是完整路径)

在 Windows CMD.EXE 中,我将提示字符串设置为$P$G,因此,如果我当前的工作目录是

C:\Some\long\folder\inner

我的提示是这样的:

C:\Some\long\folder\inner>

我希望它只显示最后一个(最低级别)文件夹名称,如下所示:

inner>

其中“inner”只是最内层文件夹的名称,它应该自动更改为我当前所在目录的最内层文件夹——相当于在 在 bash 提示符下仅显示当前目录名称(不是完整路径)。 我怎样才能做到这一点?

答案1

如果您愿意稍微改变一下自己的习惯,这里有一个解决方法。

首先,在 PATH 中选择一个可以写入的目录。假设您在自己的机器上,并且拥有管理员权限,则可以使用\Windows或。但最好使用 之类的东西。(如果您还没有将其添加到 PATH 中,请将其添加到 PATH 中。)\Program Files\something\Users\username\bin

然后在那里创建一个名为的文件CH.BAT,或类似的文件,其内容如下:

@echo off
REM Pass the argument(s) to the real "cd".  If it fails, don't do anything else.
cd %*  ||  exit /b
REM Get our current directory name.
set "dirname=%CD%"
:loop
REM Strip off one directory level -- remove everything through the first \.
set "remove_one=%dirname:*\=%"
REM If there's nothing left, that means dirname ENDS with a \.
REM The only (?) way this can happen is if it is the root directory
REM of a filesystem (partition), e.g., C:\.
REM In this case, set the prompt to the normal thing, C:\>.
if "%remove_one%" == ""          goto exit_loop
REM If "%remove_one%" == "%dirname%", that means we are down to
REM the last directory name (i.e., there are no backslashes left).
if "%remove_one%" == "%dirname%" goto exit_loop
set "dirname=%remove_one%"
REM Keep on removing levels until we get to the bottom.
goto loop

:exit_loop
REM To handle the case where a directory name contains dollar sign(s)
REM (e.g., $P$G), replace each $ with $$ to remove its special meaning
REM in the prompt, and just display a $.
set "dirname=%dirname:$=$$%"
prompt %dirname%$G

然后养成输入ch而不是 的习惯cd (或者chdir,如果你年龄足够大,能够记住它的原始名称(仍然受支持))。我相信评论解释得相当好,但概括一下:

  • 调用cd命令行参数。如果失败,则退出脚本。
  • 使用变量替换 ( ) 来去除目录级别。循环直到没有剩余操作。如果当前目录是根目录(例如 ),则提示将是 (因为您没有指定如何处理这种情况)。如果是类似 的内容,您将获得,如所要求的。%varname:old=new%C:\C:\>C:\top\outer\middle\innerinner>
  • 我们知道,美元符号在提示符中很特殊。但它们在目录名称中是合法的。您可以通过将美元符号加倍来转义提示符中的美元符号;也就是说,如果您$$在提示符中输入美元符号,它将显示为 $。因此,我们将目录名称中的所有美元符号替换为,以$$使它们正确显示。
  • 脚本将当前目录名称硬编码到提示字符串中,因此,如果您随后意外输入cd而不是 ch,您的提示不会改变。如果发生这种情况,只需输入 ch(或 )即可根据新的当前目录设置提示。ch .
  • 如果您想查看当前目录的完整路径名,请键入 cd(或 echo %CD%)。
  • 我已经用包含空格(和美元符号)的目录名测试过,但我还没有测试过所有合法字符。如果您发现问题,请告诉我。

CD.BAT当然,将脚本命名为或是没有用的CHDIR.BAT,因为 CMD.EXE 总是将cd和 解释chdir 为“更改目录”内置命令。您可以通过键入其路径名来运行此类脚本,但显然(从工作流角度来看)将其作为 的覆盖/替换是不可行的 cd

相关内容