(DOS 배치 프로그램 작성) 파일 자신이 위치하는 현재 디렉토리를 취득하는 방법 “cd %~dp0”

DOS배치파일 작성 팁

도스(DOS) 배치 파일을 만들 때 배치 파일(예:sample.bat)이 실행되는 장소를 배치 파일 안에서 현재 작업 디렉토리로 변경하는 방법을 소개합니다.

샘플 소스 작성 및 실행

[시작 > Windows 시스템 > 명령 프롬프트] 를 실행합니다.

도스 창이 열리면 C:\Users\Administrator>와 같은 프롬프트가 표시되며 커서가 깜빡이면서 키 입력을 기다립니다. 프롬프트에 표시되는 경로 C:\Users\Administrator는 현재 디렉토리를 의미합니다.

다음 내용을 sample.bat로 저장하고 C:\dir1\dir2\sample.bat경로에 배치합니다.

@echo off
echo 현재 작업 디렉토리가 실행 bat파일 경로와 다른 경우 확인
cd
echo bat파일의 전체 경로가 저장된 환경변수
echo %0
echo bat파일의 전체 경로에서 "(쌍따옴표)을 제거
echo %~0
echo bat파일의 전체 경로에서 드라이브 이름 만 취득 
echo %~d0
echo bat파일의 전체 경로에서 드라이브 이름을 제외한 폴더 경로 만 취득 
echo %~p0
echo bat파일의 전체 경로에서 드라이브 이름을 포함한 폴더 경로 취득 
echo %~dp0
echo 현재 작업 디렉토리를 변경
cd %~dp0
echo 현재 작업 디렉토리 변경 결과 확인
cd
pause

실행하고자 하는 도스(DOS) 배치 파일을 풀 패스로 C:\dir1\dir2\sample.bat를 입력하고 실행합니다. 다음과 같이 실행된 결과 가 표시됩니다. 위의 쉘 스크립트 내용과 아래의 결과를 같은 색으로 비교했습니다. 어떤 명령이 어떻게 표시되는지 쉽게 확인할 수 있습니다.

C:\Users\Administrator> C:\dir1\dir2\sample.bat
현재 작업 디렉토리가 실행 bat파일 경로와 다른 경우 확인
C:\Users\Administrator
bat파일의 전체 경로가 저장된 환경변수
"C:\dir1\dir2\sample.bat"
bat파일의 전체 경로에서 "(쌍따옴표)을 제거
C:\dir1\dir2\sample.bat
bat파일의 전체 경로에서 드라이브 이름 만 취득
C:
bat파일의 전체 경로에서 드라이브 이름을 제외한 폴더 경로 만 취득
\dir1\dir2\
bat파일의 전체 경로에서 드라이브 이름을 포함한 폴더 경로 취득
C:\dir1\dir2\
현재 작업 디렉토리를 변경
현재 작업 디렉토리 변경 결과 확인
C:\dir1\dir2
계속하려면 아무 키나 누르십시오 . . .

사용 명령 및 환경 변수 설명

다음은 샘플 소스 sample.bat에서 사용한 명령과 환경 변수에 대한 설명입니다.

사용명령
환경변수
설명
@echo off 실행 명령을 화면에 표시하지 않고 실행 결과 만 표시합니다.
지정하지 않을 경우 실행 명령도 화면에 표시됩니다.
cd파라미터(인수) 를 지정하지 않으면 현재 작업 디렉토리를 표시합니다.
echo 지정된 파라미터(인수)의 결과를 화면에 표시합니다.
%0실행되는 bat파일 자신의 전체 경로가 저장된 환경 변수
%~0실행되는 bat파일의 전체 경로에서 “(쌍 따옴표)을 제거한 결과를 저장한 환경 변수
%~d0실행되는 bat파일의 전체 경로에서 드라이브 이름 만 취득한 결과를 저장한 환경 변수
%~p0실행되는 bat파일의 전체 경로에서 드라이브 이름을 제외한 폴더 경로 만 취득, 저장한 환경 변수
%~dp0실행되는 bat파일의 전체 경로에서 드라이브 이름을 포함한 폴더 경로 취득, 저장한 환경 변수
cd %~dp0현재 작업 디렉토리를 파라미터로 지정된 환경변수 %~dp0 으로 변경
break계속하려면 아무 키나 누르십시오 . . .” 메시지를 표시하고 입력을 기다립니다.
만약 break를 지정하지 않고 도스(DOS) 배치 파일를 마우스로 더블클릭해서 실행한다면 결과를 눈으로 확인하기 전에 명령 프롬프트 창이 닫혀 버립니다.
%로 시작하는 문자는 환경 변수를 의미합니다. 위의 지정된 환경 변수는 도스(DOS) 배치 파일 쉘 스크립트에서 예약된 특수한 환경 변수입니다. 특수 환경 변수 %ERRORLEVEL%와 같이 그 역할이 정해져 있으니 많이 사용하면서 익숙해 지는 게 최선인 듯 합니다.

사용 예

다음과 같이 cd %~dp0를 앞으로 작성하는 모든 도스(DOS) 배치 파일의 선두에 기입하면 위의 예제에서 알 수 있듯이C:\Users\Administrator>C:\dir1\dir2\sample.bat 처럼 현재 작업 디렉토리가 실행 bat 파일 경로와 다른 경우에도 C:\dir1\dir2>sample.bat 같이 실행한 결과 를 얻을 수 있습니다.

@echo off
cd %~dp0
.... 이하 생략 ....
제목과 URL을 복사했습니다