Microsoft MVP성태의 닷넷 이야기
명령행 : 6. 배치 파일에서 현재 디렉토리 알아내는 방법 [링크 복사], [링크+제목 복사]
조회: 20740
글쓴 사람
정성태 (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)
94정성태2/23/20073507COM : 2. VC++ - OneNote Addin 제작
93정성태2/3/20074326공통 코딩 규약 : 2. 프로퍼티와 공용 필드에 대한 선택 [1]
92정성태2/1/20073480공통 코딩 규약 : 1. HMACSHA512 / HMACSHA384 클래스 사용시 주의사항
91정성태1/27/20073792.NET : 19. HTML InnerText 구하기
90정성태6/19/20075216Vista : 3. 현재 사용자가 관리자 그룹에 속해있는지 결정하는 코드
89정성태1/24/20072967.NET : 18. ASP.NET - AspNetHostingPermissionLevel 알아내기
88정성태1/22/20073223.NET : 17. 지역화된 폰트명 구하기
87정성태1/21/20074527.NET : 16. 클립보드 - HTML 텍스트 복사/붙여넣기
86정성태1/21/20073443.NET : 15. BinaryFormatter 에서의 진행 상태바 구현
85정성태1/20/20074442COM : 1. IE 7의 다중 탭을 이용한 네비게이션 [1]
84정성태1/19/20073385.NET : 14. 웹 서비스를 이용한 머신간의 클립보드 공유
83정성태1/12/20073263.NET : 13. SafeHandles 를 적용한 GetProcAddress 래퍼
82정성태1/12/20072989.NET : 12. Cardspace 를 위한 ASP.NET 서버 컨트롤파일 다운로드1
81정성태1/12/20073318.NET : 11. 파일 확장자에 따른 아이콘 그려주는 HttpHandler [2]파일 다운로드1
80정성태1/10/20074037SQL : 1. SQL 2005 - 대소문자 구분없이 검색하도록 구현 [1]
79정성태1/10/20072970.NET : 10. Config 설정을 .NET Class 로 매핑
78정성태1/3/20073411.NET : 9. 텍스트 꾸미는 코드
77정성태12/13/20063611.NET : 8. C# - VARIANT 관련 마샬링 코드
76정성태12/6/20064168.NET : 7. 휴대 장치 열람하는 코드
75정성태12/6/20063268.NET : 6. 웹 서비스 메서드에 대해 완료 제한 시간 설정하는 방법
74정성태11/6/20063318.NET : 5. How to Decrypt an ASP.NET Encrypted Data
73정성태11/2/20064206.NET : 4. 콘솔 프로그램 실행시간 측정
72정성태11/1/20063483.NET : 3. System Monitoring 예제
70정성태11/1/20063035.NET : 2. System.Net.NetworkInformation.Ping 클래스 사용 예제
69정성태10/27/20063215.NET : 1. Typed DataSet 에서의 ExcludeSchema 사용
68정성태6/19/20073764Vista : 2. Elevate through ShellExecute
1  2  3  4  [5]  6  7  8