노무현 대통령 배너
BLOG main image
왕미친놈의 왕미친세상입니다. 미친 소리는 써도 되지만, 근거 없는 소리는 쓰면 안 됩니다.
2019 JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC << >>
July 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

들어가며

IF EXIST 구문은 단순히 어떤 디렉터리나 파일이 존재하는지를 알려줄 뿐이다. 응용하기에 따라서는 상당히 유용한 기능을 제공한다. 또한 속성의 영향을 받지 않기 때문에 숨김 속성의 파일이나 시스템 속성의 파일도 찾아낼 수 있다. 또한 윈도 탐색기에서 접근하지 못하도록 레지스트리 등을 조작하여 감춰둔 드라이브도 접근할 수 있다.

IF EXIST 구문에는 기본 문법 외에 명령 확장이 존재하지 않는다. 정확히 말해 명령 확장을 이용할 수는 있지만, 그와 같은 명령 확장은 if 명령 전체에 적용되는 명령 확장이고, IF EXIST 구문에만 쓰이는 명령 확장이 아니다. 또다른 명령 확장으로 set 명령 확장이 있으나, 이것 역시 IF EXIST 구문에만 쓰이는 명령 확장이 아니다. 그러므로 여기에서는 설명하지 않겠다.

말뜻

EXIST는 말 그대로 "있다" 또는 "존재한다"라는 뜻을 가지고 있다. 그러므로 IF EXIST 구문은 무엇인가가 존재하는지를 묻는 구문이 된다. 존재하면 참값을, 존재하지 않으면 거짓값을 돌려준다.

예제

실제로 적용하기에는 무리가 있지만, 간단한 배치파일을 작성하였다.

  1. @echo off
  2. rem 파일명 : ExistSys.bat
  3. rem 지은이 : koc2000/SALM
  4. rem 저작권 : GPL v3
  5.  
  6. rem 예제 13.
  7. rem SYSTEM 파일로 운영체제를 가리는 배치파일
  8. rem 사용법 : ExistSys
  9.  
  10. rem c:\ 디렉터리에 존재하는 파일에 따라 시스템을 판별한다.
  11. IF EXIST c:\ntldr GOTO :WinNT
  12. IF EXIST c:\io.sys GOTO :DOS
  13.  
  14. :WinNT
  15. echo The system is Windows NT/2000/XP.
  16. goto :END
  17.  
  18. :DOS
  19. echo The system is DOS or Windows 95/98/ME.
  20. goto :END
  21.  
  22. :END

예제 13은 C 드라이브 루트디렉터리에 있는 파일을 기준으로 운영체제를 판별하는 배치파일이다. 이 배치파일은 정확한 동작을 보장하지 않지만, 대부분의 경우 올바르게 작동한다. 따라서 실제로 이용하기에는 무리가 있으나, 파일 존재 구문(IF EXIST 구문)을 시험하기에는 안성맞춤이다.

위에서 IF EXIST 구문이 두 번 나오는데, 순서를 바꾸면 오류가 난다. 왜냐하면 윈도XP를 비롯한 윈도NT 계열의 운영체제에도 C 드라이브 루트디렉터리에 io.sys와 msdos.sys, config.sys 및 autoexec.bat 파일이 존재하기 때문이다. 이것은 윈도95 계열에서도 마찬가지로 존재한다. 그러므로 윈도NT 계열에서만 존재하는 파일을 찾아야 하는데, 그것이 ntldr(NT Loader) 파일이다. 따라서 위의 배치파일은, 엄밀히 말해, 윈도NT 계열과 비윈도NT 계열을 판별하는 배치파일인 셈이다. 이때 io.sys 파일과 ntldr 파일이 숨김 속성과 시스템 속성을 함께 가지고 있지만, 문제 없이 접근하고 있다.

그러나 PC-DOS의 경우 위의 배치파일은 정상 작동하지 않는다. 왜냐하면 PC-DOS에서는 io.sys 파일 대신에 ibmio.sys 파일이 존재하기 때문이다. 그에 대한 적용은 여러분이 직접 해 보기 바란다.

감춰둔 폴더 접근

폴더 감추기는 윈도 셸인 탐색기에 적용되는 사항으로, cmd.exe 명령에는 적용되지 않는다. 또한 탐색기에서 모습을 찾을 수 없도록 감추었을 뿐 정확한 경로를 알고 있다면 얼마든지 사용할 수 있다.

오른쪽은 원래의 드라이브 구성이고, 왼쪽은 윈도 레지스트리를 조작하여 감춘 구성이다.

이 경우 주소표시줄에 직접 D:\ 와 같이 입력하면 D 드라이브의 루트 폴더에 접근할 수 있다. 앞서 말했듯이 감춰두었을 뿐 막은 게 아니기 때문이다. 그러나 사람들은 눈에 안 보이면 사용하지 못한다고 여기기 때문에 이렇게 드라이브를 감추는 작업은 유용할 때가 많다.

한편 명령 프롬프트에서는 애초에 모든 드라이브가 감춰진 상태이다.

달랑 자신의 홈디렉터리만 보여준다. 홈디렉터리는 유닉스 계열이나 명령 프롬프트에서 쓰는 개념이고, 윈도에서는 프로필폴더이다. 명령 프롬프트에서 다음과 같이 입력하면 된다.

  1. cd %USERPROFILE%

USERPROFILE 환경 변수에 자신의 홈디렉터리(프로필폴더)에 대한 정보를 가지고 있다. 정확히 어디인지를 보려면 다음과 같이 입력하면 된다.

  1. echo %USERPROFILE%

그밖에 HOMEDRIVE, HOMEPATH 등의 환경변수가 지정되어 있다. 위의 경우 홈드라이브(HOMEDRIVE)는 D: 문자열이, 홈패스(HOMEPATH)는 \Usr\LCP 문자열이 지정되어 있으며, 명령 프롬프트에서 set 명령을 입력하면 확인할 수 있다.

보통의 경우 USERPROFILE 환경 변수는 C:\Documents and Settings\USERNAME 문자열을 가지게 된다. 이때 이탤릭체로 표시한 USERNAME은 사용자마다 다르다.

아무튼 위의 두 "내 컴퓨터" 화면처럼 존재하는 폴더를 감추더라도 명령 프롬프트에서는 무리 없이 접근할 수 있다. 이것을 이용하는 것은 여러분의 몫이다.

다음 예고

이 글은 스프링노트에서 작성되었습니다.

'스크립트 > 배치파일' 카테고리의 다른 글

IF 명령 확장  (1) 2009.04.22
IF 문자열  (4) 2009.04.18
IF EXIST  (0) 2009.04.15
IF ERRORLEVEL에 쓰이는 종료코드  (12) 2009.04.14
IF 기본 설명  (6) 2009.04.09
배치파일에 매개변수 전달하기 2  (5) 2009.04.04
글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

카테고리

분류 전체보기 (1005)
스크립트 (22)
벌레와 팁 (126)
소프트웨어 (240)
하드웨어 (6)
이야기 (24)
말의 나무 (506)
미쳐보자 (22)
일기 (48)
아이폰 (10)

달력

«   2019/07   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31