在 Linux 上,我有许多脚本在切换到目录时运行。更新存储库、轮换日志等任务都是通过一个小的 bash 脚本决定的,该脚本会覆盖 bash 的“cd”,并根据我要切换到的目录运行一些脚本。
在我的 ubuntu 上,它看起来很像这样:
function cd() {
builtin cd "$@" && /home/cfv/scripts/changedir-hooks
}
我为在 Windows 上重叠现有的“cd”所做的所有努力都是徒劳的,而且在所以有人告诉我来这里询问是否我在某个地方遗漏了什么东西。
澄清一下,我知道我可以拥有自己的 cd.cmd,其中包含一些内容,但我无法运行它后Windows 的cd
,我想要做的是首先更改目录并then
根据该事实采取行动。
Windows 可以做到吗?
答案1
在BASH Shell 命令搜索序列, A外壳函数优先于BUILTIN 命令据我所知,Windows shell 中没有实现这样的概念(尽管doskey
宏可能与之类似):内部命令优先于任何同名的内容(见命令搜索序列)。因此,cd [parameters]
始终显示当前目录的名称或更改当前目录(请参阅cd /?
)。
您可以使用cd.cmd [parameters]
或 重命名cmd
脚本,参见下一个示例。此cdn
脚本执行内部命令cd
和然后将当前 CLI 窗口标题更改为类似当前目录路径的内容:
@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