[batch-file] 명령 줄 .cmd / .bat 스크립트, 실행중인 스크립트의 디렉터리를 가져 오는 방법

실행 된 스크립트의 디렉토리를 가져와 .cmd 파일 내에서 사용하려면 어떻게해야합니까?



답변

Raymond Chen은 몇 가지 아이디어를 가지고 있습니다.

https://devblogs.microsoft.com/oldnewthing/20050128-00/?p=36573

MSDN 아카이브는 다소 불안정한 경향이 있으므로 여기에 전체를 인용했습니다.

쉬운 방법은 %CD%의사 변수 를 사용하는 것 입니다. 현재 작업 디렉토리로 확장됩니다.

set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory

(물론, 저장 / 복원 디렉토리는 더 쉽게 함께 할 수 있었다 pushd/ popd하지만 여기 지점이 아니다.)

%CD%트릭은 명령 줄에서 편리도 있습니다. 예를 들어, 작업 할 파일이있는 디렉토리에있는 경우가 많지만 … 오, 해당 작업을 수행하려면 다른 디렉토리로 chdir해야합니다.

set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args

( %_%스크래치 환경 변수 로 사용 하고 싶습니다.)

SET /?명령 프로세서에서 제공하는 다른 의사 변수를 보려면 입력 하십시오.

또한 기사의 주석은 예를 들어이 기사를 스캔 할 가치가 있습니다 (기존 기사에서 주석이 제거되었으므로 WayBack Machine을 통해).

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741

여기에는 % ~ dp0 사용이 포함됩니다.

배치 파일이 어디에 있는지 알고 싶다면 : %~dp0

%0배치 파일의 이름입니다. ~dp지정된 인수의 드라이브 및 경로를 제공합니다.


답변

이것은 스크립트의 경로와 동일합니다.

%~dp0

이것은 배치 매개 변수 확장 구문을 사용합니다. 매개 변수 0은 항상 스크립트 자체입니다.

스크립트가에 저장되어 있으면 C:\example\script.bat%~dp0평가됩니다 C:\example\.

ss64.com 에는 매개 변수 확장 구문에 대한 자세한 정보가 있습니다. 관련 발췌문은 다음과 같습니다.

명령 줄에서 % 뒤에 숫자 위치를 사용하여 모든 매개 변수의 값을 가져올 수 있습니다.

[…]

매개 변수를 사용하여 파일 이름을 제공하면 다음 확장 구문을 적용 할 수 있습니다.

[…]

% ~ d1 % 1을 (를) 드라이브 문자로만 확장합니다.-C :

[…]

% ~ p1 % 1을 경로로만 확장합니다 (예 : \ utils \). 여기에는 일부 명령에서 이스케이프 문자로 해석 될 수있는 후행 \이 포함됩니다.

[…]

위의 수정자를 결합 할 수 있습니다.

% ~ dp1 % 1을 드라이브 문자와 경로로만 확장합니다.

[…]

% 0을 사용하여 배치 스크립트 자체의 경로 이름을 가져올 수 있으며, 여기에 매개 변수 확장을 적용 할 수 있으므로 % ~ dp0은 배치 스크립트에 대한 드라이브 및 경로 (예 : W : \ scripts \)를 반환합니다.


답변

for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%

출처


답변