sigcheck.exe 로 어느 파일의 버전을 확인해보자.
윈도우 설치 부팅PE에 사용한 AUTOXML.CMD에서 사용된 예로 들면,
::설치된 윈도우 드라이브검색
for %%i in (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: Y: Z:) do (
IF exist %%i\$WINDOWS.~BT (
SET windrv=%%i
)
)
::윈도우7일경우 usb3 자동설치
for /f "usebackq tokens=1-2 delims=." %%i in (`sigcheck.exe -accepteula -n %windrv%\windows\explorer.exe`) do set VERSION=%%i.%%j
if "%version%" == "6.1" start /wait %USBDRV%\AUTOXML\win7usb3.exe %windrv%
맨 끝줄, 설치한 윈도우가, 윈도우7일 경우 win7usb3.exe를 실행해서 USB3.0드라이버를 자동 통합하는 구문으로 되어 있다.
윈도우 버전들은 다음과 같이 빌드 넘버를 가지고 있다.
6.0 비스타
6.1 윈도우7
6.2 윈도우8
6.3 윈도우8.1
10.0 윈도우10
10.0.10240 윈도우10 RS1
10.0.15063 윈도우10 RS2
10.0.16299 윈도우10 RS3
10.0.17134 윈도우10 RS4
sigcheck 은 sysinternal 사의 툴중 하나다.MS에서 인수한것으로 보인다.
https://docs.microsoft.com/ko-kr/sysinternals/downloads/sigcheck
32비트 64비트가 있다.
옵션들은 많이 있다. https://ss64.com/nt/sigcheck.html 참고
아래 를 보자.
-accepteula는 프로그램실행동의 옵션 으로 프로그램 실행시마다 나타나면 짜증나겠지?
그래서 자동으로 "동의" 해준다.
-n 은 프로그램 버전명만 딱 보여준다. 좋지.
CMD창에서 한번 해보자
sigcheck.exe -accepteula -n %windir%\explorer.exe
아래와 같이 나올 것이다.
sigcheck 의 정보와 그리고 우리가 요구하는 버전명
Sigcheck v2.60 - File version and signature viewer
Copyright (C) 2004-2017 Mark Russinovich
Sysinternals - www.sysinternals.com
10.0.17134.1 (WinBuild.160101.0800)
sigcheck.exe -accepteula -n %windir%\explorer.exe >a.txt
로 해보면 딱 버전명 한줄만 나온다.
따라서 sigcheck 의 정보는 단지 CMD에서 보여주기만 할 뿐임을 알 수 있다.
그러면 다음과 같이 배치를 작성해보자.
@echo off
pushd %~dp0
for /f "usebackq tokens=1-2 delims=." %%i in (`sigcheck.exe -accepteula -n %windir%\explorer.exe`) do set %VERSION%= %%i.%%j
if "%VERSION%" == "6.1" echo win7
if "%VERSION%" == "10.0" echo win10
usebackq를 쓰는 것은 ( )에 명령구문을 쓰기때문에 사용하며 명령구문을 사용할시 ` (키보드 숫자1의 왼쪽옆) 키로 명령구문 처음과 끝을 묶어준다
변수로 받을 토큰을 점 기호 기준으로 2개만 받기
따라서 버전명
10.0.17134.1 (WinBuild.160101.0800)
이것을 점 을 기준으로 끝었을때 첫번째, 두번째이므로
10 0 이 %%i %%j 에 각각 할당된다.
따라서 SET %VERSION%=%%i.%%j 로 주었을때
VERSION=10.0 이 된다.
응용을 해서 AUTOXML에 사용함.