답변:
CMD 파일에서이를 수행하는 두 가지 방법은 다음과 같습니다.
for /f "delims=" %%i in ('where %1') do cd /d "%%~dPi."
또는 cmd에는 이미 비슷한 기능이 내장되어 있으므로 WHERE 명령을 모두 제거 할 수 있습니다.
cd /d "%~dP$PATH:1."
FindExe.cmd와 같은 경로에 원하는 행을 CMD 파일에 넣고 실행하십시오 findexe calc.exe. 명령 줄 (CMD 파일이 아닌)에서 대화 형으로 실행하려면 다음과 같이 붙어 있다고 생각합니다.
for /f "delims=" %i in ('where calc.exe') do cd /d "%~dPi."
.. 적절한 명령으로 calc.exe 를 대체 합니다.
궁금한 경우 시도한 방식이 두 가지 이유로 작동하지 않습니다.
WHERE파일 이름을 포함한 전체 경로를 반환합니다. 파일 이름을 원하지 않습니다.cd 파이프 입력을받지 않습니다.$PATH와 함께 사용하기위한 참조 자료 가 for있습니까?
for끝을 향한 명령에 도움이됩니다 . ( for /?) 다른 변수뿐만 아니라 다른 변수에서도 작동한다고 생각합니다 PATH. FOR 명령을 건너 뛰었지만 구문은 동일합니다. 내 예에서는 분명하지 않지만 CMD 파일에 전달 "%~dP$PATH:1된 %1인수에서 작동하고 있습니다. 답의 해당 부분에서 FOR에 대한 언급을 제거하고 있습니다.
$~dP$PATH:1대신에 %~dp$PATH:1( $%
cd /d@barlop이 지적한대로 사용
명령 줄에서 :
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.
do cd /d %~dpa있지만 당신이 가진 조합 %~da && cd %~dpa은 좋고 흥미 롭습니다.
for /f %f in ('echo abc') do set a=%f 그러나 당신은 작동하지 않을 CD blah \ bleh \ git.exe를 원하지 않습니다. 따라서 데이비드가 줄을 가지고 있다면 'do'다음에 cd % ~ dpa를 넣으면 CD가 경로로만 이동합니다 .. cd / d는 cd의 성능을 향상 시키므로 경로가 다른 드라이브 / 파티션에 있으면 CD는 여전히 작동합니다. \ 어쩌구 : 당신이 CD z를 할 경우 : 당신이 CD / DZ하지 않는 \ 어쩌구 작동하지 않습니다
cd하고where git잘못된 방향으로 주위에. 출력을 (옵션이없는 경우 현재 디렉토리를 알려주지 않음) 명령 으로 파이프하는 순간 현재 위치를 파악git하고로 파이프해야 합니다 .cdcdwhere