我需要转到程序目录(例如 git)。where git | cd
不起作用,因为它返回文件而不是文件夹。实现该目标的正确方法是什么?
答案1
以下是通过 CMD 文件执行此操作的两种方法:
for /f "delims=" %%i in ('where %1') do cd /d "%%~dPi."
或者您可以完全消除 WHERE 命令,因为 cmd 已经内置了类似的功能:
cd /d "%~dP$PATH:1."
将首选行放在路径中的 CMD 文件中,例如 FindExe.cmd,然后运行findexe calc.exe
。如果您想从命令行(而不是在 CMD 文件中)以交互方式运行它,我认为您只能这样做:
for /f "delims=" %i in ('where calc.exe') do cd /d "%~dPi."
.. 替代计算程序使用适当的命令。
如果您感到疑惑,您尝试的方法之所以不起作用有两个原因:
WHERE
返回包含文件名的完整路径。您不需要文件名。cd
不接受管道输入。
答案2
如何进入程序目录?
从命令行:
for /f "usebackq tokens=*" %a in (`where git`) do %~da && cd %~dpa
从批处理文件:
for /f "usebackq tokens=*" %%a in (`where git`) do %%~da && cd %%~dpa
根据巴洛普,该do
部分可以从简化%%~da && cd %%~dpa
到cd /d %%~dpa
。
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 对于/f- 循环命令以执行另一个命令的结果。
- 参数- 命令行参数(或参数)是传递到批处理脚本的任何值:
答案3
仅使用for
修饰符(更快,更紧凑,并且在where
不可用时也能工作)pushd
因此可以返回原点:
for %i in (git.exe) do pushd %~dp$PATH:i
(我刚刚注意到 GuitarPicker 提出了类似但不完全相同的解决方案……)