Microsoft MVP성태의 닷넷 이야기
명령행 : 6. 배치 파일에서 현재 디렉토리 알아내는 방법 [링크 복사], [링크+제목 복사]
조회: 19966
글쓴 사람
정성태 (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

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

[연관 글]





[최초 등록일: ]
[최종 수정일: 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)
196정성태10/28/2019751장치 관리자처럼 각 장치들에 할당된 리소스(예: Memory Range) 상태를 코드로 알아내는 방법
195정성태4/25/2019981Extracting Text from an Image Using Tesseract in C#
194정성태4/25/2019786Parse the Command Line with System.CommandLine
193정성태8/2/20173455.NET : 62. github - C# to JavaScript, WPF to JavaScript and Samples
192정성태6/29/20163225.NET : 61. TreeLib: Balanced Binary Trees ? Rank Augmented, for .NET
191정성태10/13/20154440.NET : 60. MICROSOFT TRANSLATOR HUB
190정성태6/20/20155230Win32 : 6. UMDH Visualizer - Memory profile viewer
189정성태1/19/20146445.NET : 59. QR 코드를 ASP.NET과 WPF에서 사용하는 방법
188정성태1/15/20146878.NET : 58. 윈도우폰 7 - 안면인식, Cartooning...
187정성태1/14/20146855.NET : 57. BCL에서 제공되는 컬렉션에 만족하지 못한다면? [1]
186정성태6/26/20136893.NET : 56. The managed way to retrieve text under the cursor (mouse pointer)
185정성태9/27/20127851.NET : 55. Face Detection with Emgu CV in C# and WPF
184정성태9/23/20126724.NET : 54. What was that sound Visual Studio? Audio Editor Beta For VS 2012 (plus free sounds library too!)
183정성태4/19/20128218.NET : 53. Virtual Router 소스 코드 및 실행 파일 (C#)
182정성태4/16/20128801.NET : 52. SharpDX [1]
181정성태3/3/201211567.NET : 51. .NET 에서 DirectX 를 이용하여 스크린 캡쳐를 빠르게 하는 방법 [3]
180정성태3/3/20127345.NET : 50. Restart Manager 를 이용하여 .NET 에서 잠긴 파일을 소유하고 있는 프로세스 찾는 방법
179정성태1/14/20126839.NET : 49. WebAPI Developer Preview 6: Self Hosted Mode Example
178정성태10/31/20118769.NET : 48. app.config 의 supportedRuntime 종류
177정성태10/15/20117687.NET : 47. Irony - Language Implementation Kit
176정성태7/22/20117668.NET : 46. Manual Validation with Data Annotations
175정성태5/18/20119226Win32 : 5. UuidCreateSequential
174정성태5/4/20117775.NET : 45. NTrace v2 now available (think Managed VS2010/.Net 4 Event Tracing for Windows)
173정성태4/12/20119102레지스트리 : 11. BHO를 IE와 탐색기에서 선택적으로 로드하고 싶다면?
172정성태4/1/20118298.NET : 44. ContextBoundObject
[1]  2  3  4  5  6  7  8