실행 된 스크립트의 디렉토리를 가져와 .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 \)를 반환합니다.