본문 바로가기

윈도우 일반

배치 파일에서 윈도우 버전 확인하기


배치 파일을 만들다 보면 윈도우 버전에 따라 그 명령을 달리하거나 값을 달리 적용해야 할 때가 있습니다. 그럴 땐 현재 윈도우의 버전을 변수로 저장하고 이에 맞춰 적절한 명령을 내리도록 만들어줘야 하죠. 다행히도 Ver 명령을 통해 명령 프롬프트에서 윈도우의 버전을 확인할 수 있습니다.




2K, XP 의 5.x 버전과 비스타, 7, 8 의 6.x 버전의 출력 결과가 조금은 다르지만 어쨌든 [Version x.x.xxxx] 부분은 동일한 것을 확인할 수 있습니다. 그래서 for /F (delims=[, delims=]) 를 통해 먼저 Version x.x.xxxx 를 추출하고, 이 값을 토대로 다시 x.x.xxxx 를 추출하여 %WinBuild% 변수로 저장하였습니다.

이제 여기에서 1 배치 파일은 for /F delims=. 을 통해 버전을 A, B, C 로 나눈 후 이를 대조하였고, 2 배치 파일은 그냥 %WinBuild% 변수에서 필요한 만큼만 추출하여 대조한 후 마지막으로 %WinVer% 변수로 저장하였습니다.

A = 5, B = 00 : 2K (윈도우 2000)
A = 5, B = 1 : XP (윈도우 XP)
A = 6, B = 0 : Vst (윈도우 비스타)
A = 6, B = 1 : Svn (윈도우 7)
A = 6, B = 2 : Eit (윈도우 8)

C 의 빌드 넘버까지 대조하면 서비스 팩까지 확인이 가능하지만 굳이 그렇게 까지 자세하게 나눌 필요는 없어 보입니다. 코드는 2 배치 파일이 더 깔끔하지만 2K 가 0 이 아니라 00 인지라 그것까지 고려하고, 뒤의 빌드넘버까지 생각한다면 1 배치 파일처럼 그냥 for /F 로 다시 나누는 게 더 좋아 보입니다. 물론 현재 상황에서 2K 는 사실상 고려할 필요가 없다고 할 수 있고, 그렇다면 2 배치 파일로도 전혀 문제가 없지만 말입니다.


여기에 더해 윈도우 폴더의(%windir%) SysWOW64 폴더의 존재 유무를 통해 32비트 버전과 64비트 버전을 확인하였고 %WinBit% 변수로 저장하였습니다. 다른 방법도 있지만 이게 제일 간단하고 이렇게만 해도 별 무리는 없어 보입니다.


이제 이렇게 저장한 %WinVer% 변수와 %WinBit% 변수를 통해 필요할 때 명령을 분기시키시면 됩니다.


참고로 for /F 구문의 중첩을 위해 확장 지연 변수를 사용하였고, 그래서 다른 배치 파일에 해당 코드를 끼워넣더라도 setlocal enabledelayedexpansion 을 반드시 함께 지정해주셔야 합니다. 그것 외에는 별로 주의할 건 없습니다.


이러한 윈도우 버전의 확인은 제가 제작한 배치 파일들에서 종종 사용했는데 거의 필요할 때마다 다시 만드는 경우가 많았죠. 그래서 배치 파일끼리 대충 비슷하지만 뭔가 조금씩 다르곤 합니다. 제 배치 파일에서 공통적으로 자주 사용되는 부분이기에 이번에 깔끔하게 정리해봤습니다. 자꾸 예전에 뭘 해놨는지 까먹는단 말이죠. ^^; 배치 파일을 좀 더 깔끔하게 짤 수 있으면 좋을텐데 제 실력은 여기까지네요. ^^;;; 이상입니다.