프로그램 디렉토리로 이동하는 방법?


2

프로그램 디렉토리 (예 : git)로 이동해야합니다. where git | cd폴더 대신 파일을 반환하기 때문에 작동하지 않습니다. 그것을 달성하는 올바른 방법은 무엇입니까?


첫째로 당신은 당신이 cd하고 where git잘못된 방향으로 주위에. 출력을 (옵션이없는 경우 현재 디렉토리를 알려주지 않음) 명령 으로 파이프하는 순간 현재 위치를 파악 git하고로 파이프해야 합니다 . cdcdwhere
Mokubai

1
그는 의미 where git|cd합니다.
krowe

2
cd파이프를 통한 입력은 허용하지 않습니다. 또한 결코 없습니다.
Daniel B

답변:


3

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 를 대체 합니다.

궁금한 경우 시도한 방식이 두 가지 이유로 작동하지 않습니다.

  1. WHERE파일 이름을 포함한 전체 경로를 반환합니다. 파일 이름을 원하지 않습니다.
  2. cd 파이프 입력을받지 않습니다.

$PATH와 함께 사용하기위한 참조 자료 가 for있습니까?
DavidPostill

2
for끝을 향한 명령에 도움이됩니다 . ( for /?) 다른 변수뿐만 아니라 다른 변수에서도 작동한다고 생각합니다 PATH. FOR 명령을 건너 뛰었지만 구문은 동일합니다. 내 예에서는 분명하지 않지만 CMD 파일에 전달 "%~dP$PATH:1%1인수에서 작동하고 있습니다. 답의 해당 부분에서 FOR에 대한 언급을 제거하고 있습니다.
GuitarPicker

그것은 매우 흥미로운이지만 % 1 참조 작업 할 그 $의 PATH 라인 얼마나 당신은 명확하게 할 수 @GuitarPicker pastebin.com/raw.php?i=HEviVCLm을 당신이 그것을 얻을 않았다 어떻게 그렇게 % 1을 사용하지 않는 경우 일하다?
barlop

@barlop 당신 $~dP$PATH:1대신에 %~dp$PATH:1( $%
DavidPostill

2
현재 프로그램이있는 드라이브와 다른 드라이브에있는 경우 변형 버전이 작동하지 않습니다. cd /d@barlop이 지적한대로 사용
DavidPostill

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

의 의견에 따라 barlopdo부분에서 간단하게 할 수 있습니다 %%~da && cd %%~dpacd /d %%~dpa.


추가 자료

  • Windows CMD 명령 행의 AZ 색인 -Windows cmd 행과 관련된 모든 것에 대한 훌륭한 참조 자료.
  • for / f- 다른 명령의 결과에 대한 루프 명령.
  • parameters- 명령 행 인수 (또는 매개 변수)는 배치 스크립트로 전달되는 모든 값입니다.


@DavidPostill 당신은 그것을 향상시킬 수 do cd /d %~dpa있지만 당신이 가진 조합 %~da && cd %~dpa은 좋고 흥미 롭습니다.
barlop

@PHPst CMD가 CD expand (where git)와 같은 것을 지원한다면 이상적입니다. 그러나 그렇지 않습니다. 대신 CMD는 명령의 출력에 변수를 설정하는 데 사용할 수있는 매우 긴 명령을 가지고 있습니다. 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하지 않는 \ 어쩌구 작동하지 않습니다
barlop

@PHPst 그러나 어쨌든 복잡한 주된 이유. 언급 된 바와 같이 CMD는 cd 'command'와 같은 것을 지원하지 않기 때문에 그 대안 (for)은 길이와 추악함의 부조리와 다소 까다로운면에서 다소 힘든 작업입니다. 'For'는 여러 가지 용도로 사용되며 이상한 것입니다.
barlop

1
관심이 없으면 usebackq를 선호하는 이유가 있습니까? (usebackq를 사용하지 않고 작은 따옴표를 사용하는 것과 대조적으로).
barlop


0

for수정 자 만 사용 하면 (빠르고 컴팩트하며 where사용할 수없는 경우에도 작동 함 ) pushd원점으로 돌아갈 수 있습니다.
for %i in (git.exe) do pushd %~dp$PATH:i

(방금 GuitarPicker가 유사하지만 정확히 동일하지는 않은 솔루션을 제안하는 것을 보았습니다 ...)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.