Мне нужно перейти в каталог программ (например, Git). where git | cd
не работает, потому что он возвращает файл вместо папки. Как правильно достичь этого?
3 ответа
Вот два способа сделать это из файла 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."
.. подставляя calc.exe соответствующей командой.
Если вам интересно, то, как вы пытались, не работает по двум причинам:
WHERE
возвращает полный путь, включая имя файла. Вы не хотите имя файла.cd
не принимает ввод по каналу.
Как мне перейти в каталог программ?
Из командной строки:
for /f "usebackq tokens=*" %a in (`where git`) do %~da && cd %~dpa
Из пакетного файла:
for /f "usebackq tokens=*" %%a in (`where git`) do %%~da && cd %%~dpa
Согласно комментарию от barlop, часть do
может быть упрощена с %%~da && cd %%~dpa
до cd /d %%~dpa
.
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- for /f - Циклическая команда против результатов другой команды.
- параметры - аргумент командной строки (или параметр) - это любое значение, переданное в пакетный скрипт:
используя модификаторы только (быстрее, более компактных , а также работает , если for
не доступно) и where
так что можно вернуться к происхождению:
pushd
(Я только заметил, что GuitarPicker предложил похожее, но не совсем то же самое решение ...)