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


개인적으로, 초기 프로젝트 구성에서 배치 파일을 즐겨 사용합니다. 일종의 프로토타입 식인데요. 프로젝트가 어느 수준까지 접어들기 전에는 변화가 많기 때문에 처음부터 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

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

[연관 글]






[최초 등록일: ]
[최종 수정일: 1/18/2024]

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)
120정성태9/14/20074705Vista : 7. Gadget Samples for Windows Sidebar
119정성태8/23/20074956.NET 3.5 : 3. WCF 서비스에서 HTTP 헤더 설정
118정성태6/20/20075477.NET 3.5 : 2. LINQ - 페이징 구현
117정성태6/20/20075134.NET : 23. Silverlight 응용 프로그램 제작
116정성태6/19/20075459.NET : 22. Bluetooth on Managed code [2]
115정성태6/17/20074829레지스트리 : 4. .NET Framework 및 Visual Studio 관련 레지스트리 키
114정성태6/9/20075191레지스트리 : 3. DWM enable/disable
113정성태6/9/20074658Vista : 6. 웹 사이트 추가/삭제 예제 코드
112정성태6/7/20074622Vista : 5. Transacted NTFS 코드 예제들
111정성태6/6/20074904.NET 3.5 : 1. LINQ 를 이용하여 DB 데이터를 XML 로 변환
110정성태6/2/20074810레지스트리 : 2. Aero Glass 효과를 느리게 보여주는 설정
109정성태5/19/200710335공통 코딩 규약 : 4. 닷넷 직렬화 방법 - 이진 직렬화(Binary Serialization) 사용 패턴
108정성태5/19/20074780공통 코딩 규약 : 3. 탭 문자 설정 [1]
107정성태5/11/20074671명령행 : 5. 비스타 - Auditing 관련 옵션 제어
106정성태5/11/20075648.NET 3.0 : 2. WPF - InvokeRequired 대신 CheckAccess 호출
105정성태5/9/20074440명령행 : 4. [PS] 같은 이름을 가진 프로세스 중에서 제일 먼저 띄운 인스턴스를 제외하고 모두 종료
104정성태5/3/20074423명령행 : 3. [롱혼] ServerManagerCmd.exe
103정성태4/18/20074474웹폼 코딩 규약 : 1. 서버측 웹폼 컨트롤 - 클라이언트 측 이벤트를 노출시키는 방법
102정성태4/18/20075875COM : 3. ActiveScript의 문법 오류 검사 [3]
101정성태4/18/20075080레지스트리 : 1. 비스타 - IIS 서비스 설치 여부
100정성태3/29/20074529명령행 : 2. AppPool 재시작
99정성태3/22/20074702명령행 : 1. 닷넷 웹 사이트 소스를 공유 폴더에 위치한 경우 설정
98정성태3/7/20075173.NET : 21. 저장 프로시저(SP)에 관한 스키마 정보 알아내기
97정성태3/7/20074528.NET 3.0 : 1. Boilerplate code for custom Encoder Binding Elements
96정성태3/7/20075261Vista : 4. 마스터 볼륨을 조정하는 방법
95정성태2/23/20074970.NET : 20. .Net Zip Library/Utility updates and fixes
1  2  3  [4]  5  6  7  8