2

Мне нужно перейти в каталог программ (например, Git). where git | cd не работает, потому что он возвращает файл вместо папки. Как правильно достичь этого?

3 ответа3

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 соответствующей командой.

Если вам интересно, то, как вы пытались, не работает по двум причинам:

  1. WHERE возвращает полный путь, включая имя файла. Вы не хотите имя файла.
  2. cd не принимает ввод по каналу.
1

Как мне перейти в каталог программ?

Из командной строки:

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 .


Дальнейшее чтение


0

используя модификаторы только (быстрее, более компактных , а также работает , если for не доступно) и where так что можно вернуться к происхождению:
pushd

(Я только заметил, что GuitarPicker предложил похожее, но не совсем то же самое решение ...)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .