Microsoft MVP성태의 닷넷 이야기
명령행 : 6. 배치 파일에서 현재 디렉토리 알아내는 방법 [링크 복사], [링크+제목 복사]
조회: 20744
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
배치 파일에서 현재 디렉토리 알아내는 방법


개인적으로, 초기 프로젝트 구성에서 배치 파일을 즐겨 사용합니다. 일종의 프로토타입식인데요. 프로젝트가 어느 수준까지 접어들기 전에는 변화가 많기 때문에 처음 부터 MSBuild Task로 작업하기에는 너무 부담스러운 것이 사실입니다. 배치 파일을 이용하게 되면, 제법 자유롭게 빌드, 테스트 머신으로의 자동 배포, 설치 파일 패키징 등의 작업을 유연하게 바꿀 수 있는 장점이 있지요.

그 중에서, 유용한 코드가 현재 디렉토리를 환경 변수에 설정하는 것입니다.

Capturing the current directory from a batch file
; https://devblogs.microsoft.com/oldnewthing/20050128-00/?p=36573

SET CURDIR=%CD%

이걸 사용하지 않으면 절대 경로를 설정하게 되고 향후의 유지 보수에 골치가 좀 아프지요.

그런데, 위와 같은 코드가 통하지 않는 경우가 있습니다. 바로 "Run as administrator"로 배치파일을 실행한 경우입니다. 이 때에는 cmd.exe가 위치한 %WINDIR%\system32 폴더가 %CURDIR% 변수에 매핑되게 됩니다.

물론, 이런 경우에 대한 해법도 있습니다. ^^

"run as administrator" changes default directory 
; http://www.vistax64.com/vista-general/79849-run-administrator-changes-default-directory.html

FOR /F %%I IN ("%0") DO SET CURRENTDIR=%%~dpI

그저 관용적으로 쓸 수 있으니 배치 파일에 위의 코드를 그냥 가져다 적용하시면 됩니다. 하드 코딩은 없으면 없을 수록 좋은 것이니. ^^

[연관 글]


donaricano-btn



[최초 등록일: ]
[최종 수정일: 10/28/2020 ]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

비밀번호

댓글 쓴 사람
 



2020-10-15 08시18분
dos command to sperate file name and extension into variables
; https://stackoverflow.com/questions/8749637/dos-command-to-sperate-file-name-and-extension-into-variables/8749894

--------------------------
REM test.bat

@echo off

echo "%%~1" %~1
echo "%%~f1" %~f1
echo "%%~d1" %~d1
echo "%%~p1" %~p1
echo "%%~n1" %~n1
echo "%%~x1" %~x1
echo "%%~s1" %~s1
echo "%%~a1" %~a1
echo "%%~t1" %~t1
echo "%%~z1" %~z1
      
echo "%%~dp1" %~dp1
echo "%%~nx1" %~nx1

--------------------------

C:\temp\batch_filename_ext> test.bat test.txt
"%~1" test.txt
"%~f1" C:\temp\batch_filename_ext\test.txt
"%~d1" C:
"%~p1" \temp\batch_filename_ext\
"%~n1" test
"%~x1" .txt
"%~s1" C:\temp\batch_filename_ext\test.txt
"%~a1" --a--------
"%~t1" 2020-10-15 오전 09:16
"%~z1" 7
"%~dp1" C:\temp\batch_filename_ext\
"%~nx1" test.txt
정성태

1  2  3  4  5  6  [7]  8 
NoWriterDateCnt.TitleFile(s)
42정성태7/17/20033123KBManager WebBand (VC 6.0, ATL/Script) 2001.10.01파일 다운로드1
41정성태7/17/20033223UrlMonDownload (VC 6.0, ATL) 2001.06.16파일 다운로드1
40정성태7/17/20033209IE 북마크 임포트 (VC 6.0, ATL, MFC 지원) 2001.01.20파일 다운로드1
39정성태7/17/20033752MsIE.exe (VC 6.0, ATL, HTML Parser 로서의 IHTMLDocument2 이용 및 IE 보안설정) 2000.11.23파일 다운로드1
38정성태7/17/20033295EnumIE.exe (VC 6.0, ATL, 현재 사용중인 IE 에 접속) 2000.10.24파일 다운로드1
37정성태7/17/20033212ReuseIE.exe (VC ++ 6,0, Internet Explorer 재사용) 2000.04.17파일 다운로드1
36정성태7/17/20032800RemoteViewer dll (VC ++ 6.0, ATL) 2000.03.13파일 다운로드1
35정성태7/17/20033127IESpy dll (VC ++ 6.0, ATL) 2000.02.28파일 다운로드1
34정성태7/17/20032808Bmp2Gif 콘트롤 (VC ++ 6.0, MFC) 2000.02.28파일 다운로드1
33정성태7/17/20032639Gif89a 콘트롤 (VC ++ 6.0, ATL) 2000.02.28파일 다운로드1
32정성태7/17/20033162이미지 4버튼 (VC ++ 6.0, ATL) 2000.02.28파일 다운로드1
31정성태7/17/20032766이미지 홀더 (VC ++ 6.0, ATL) 2000.02.28파일 다운로드1
30정성태7/17/20032913이미지 뷰어 (VC ++ 6.0, ATL) 2000.02.28파일 다운로드1
29정성태7/17/20032734ChatClient (VC ++ 6.0, MFC) 1999.09.09파일 다운로드1
28정성태7/17/20034042Winsock2 SPI : LSP 예제 (VC ++ 6.0) 2001.08.07파일 다운로드1
27정성태7/17/20033166Echo Services Server (VC ++ 6.0, ATL Service) 2001.01.07파일 다운로드1
26정성태7/17/20036044FTP Client (VC ++ 6.0, MFC) 1999.09.14파일 다운로드1
25정성태7/17/20032531모뎀 정보를 알아내는 클래스 (VC ++ 6.0, MFC) 1999.09.12파일 다운로드1
24정성태7/17/20037212Ping (VC ++ 6.0, MFC, CSocket Class) 1999.09.09 [1]파일 다운로드1
23정성태7/21/20036104ChatServer / ChatClient (VC ++ 6.0, MFC, Win32 API Socket) 1999.08.01파일 다운로드2
22정성태7/17/20032741성능 객체 카운터 (VC 6.0, Win32) 2001.07.07파일 다운로드1
21정성태7/17/20032806StringSplit 클래스 (VC++6.0, Win32) 2000.02.28파일 다운로드1
20정성태7/17/20033087SQLDirect 클래스 (VC++6.0, Win32) 2000.02.28파일 다운로드1
19정성태7/17/20032459ImeControl 클래스 (VC++6.0, Win32) 2000.02.28파일 다운로드1
18정성태7/17/20032656RegistryEx 클래스 (VC++6.0, Win32) 2000.02.28파일 다운로드1
17정성태9/22/20053557Crypto 클래스 (VC++6.0, Win32) [1]파일 다운로드1
1  2  3  4  5  6  [7]  8