2013-05-06 6 views
0

XP/2003 또는 7/R2에서 실행 중일 때 다르게 동작해야하는 설치 스크립트가 있습니다. 정상적으로 작동합니다. 몇 주 전 XPe에서 실행되지 않는다는 것을 알았습니다. (7e에서 잘 작동합니다.) find.exe는 XPe에 포함되어 있지 않습니다.XP에서 Windows 버전을 확인하기위한 배치 파일

내 현재 스크립트가 사용

ver | find "5." > nul 
if %ERRORLEVEL% == 0 goto WinXP 
    goto Win7 

내가 실행 가능한 솔루션을 테스트하기 위해 동료의 XPe 장치를 빌려, 나는 프로 XP에서의 Find.exe을 복사했는데, 그것은 여전히 ​​작동하지 않았다. 나는 다양한 버전 (findxp.exe에 대한 전체 경로, with/without .exe)을 시도했지만 여전히 작동하지 않는다. 다음은 XPe의 결과입니다.

저는 XP/2003의 경우 정말 그렇습니다. 그렇지 않으면 Vista (하하) 또는 2008 또는 그 이상이라고 가정합니다. 그것이 XPe인지 말해 준 해결책에 반대하지는 않겠지 만, 장래에 유용 할 수도 있고 그렇지 않을 수도 있습니다. 그러나 모든 버전을 고려해야하므로 스크립트를 더 복잡하게 만들 것입니다. Windows의.

감사합니다, 브라이언

답변

2

에서 아래의 코드 세그먼트가 필요하지 않은 원본 코드의 직접 대체 find.exe :

for /F "delims=" %%a in ('ver') do set ver=%%a 
if "%ver:5.=%" neq "%ver%" goto WinXP 
goto Win7 
+0

저는 오늘 실제로 사무실에 있습니다. XPe 시스템을 몇 시간 동안 훔쳐서이 문제를 해결할 수 있는지 알아 보려고합니다. – Brian

+0

감사합니다. 이것은 아름답게 일했다! 필자의 스크립트는 꽤 복잡하고 꽤 많이 있지만,'for' 또는':: delims = "%% aa'를 사용하지 않았기 때문에 이것을 조사하고 그 주위를 돌아 봐야 할 것입니다. 하지만 이것은 엔도로의 솔루션보다 간단합니다. (어느 시점에서 사용해도 좋을지도 모릅니다.) – Brian

+0

@ 브라이언 : 제가 생각하기에 충분하지 않은 세부 사항은 "엔도로의 솔루션 "은 나에 의해 작성되었습니다."Endok의 답변에있는 코드 아래에있는 "© Aacini at dostips"라인을 검토하십시오 ... – Aacini

0
@ECHO OFF 
SET OSVersion=Unknown 

VER | FINDSTR /L "5.0" > NUL 
IF %ERRORLEVEL% EQU 0 SET OSVersion=2000 

VER | FINDSTR /L "5.1." > NUL 
IF %ERRORLEVEL% EQU 0 SET OSVersion=XP 

VER | FINDSTR /L "5.2." > NUL 
IF %ERRORLEVEL% EQU 0 SET OSVersion=2003 

VER | FINDSTR /L "6.0." > NUL 
IF %ERRORLEVEL% EQU 0 SET OSVersion=Vista 

VER | FINDSTR /L "6.1." > NUL 
IF %ERRORLEVEL% EQU 0 SET OSVersion=7 

IF %OSVersion%==Unknown (
ECHO Unable to determine your version of Windows. 
) ELSE (
ECHO You appear to be using Windows %OSVersion% 
) 

ECHO. 
PAUSE 
0

아래를 확인하세요. 또한, 당신은 여기에 액세스 할 수 있습니다

vers 

것은이 표시됩니다 http://pastebin.com/iUtgN4ZU

@echo off 

ver | find "2003" > nul 
if %ERRORLEVEL% == 0 goto ver_2003 

ver | find "XP" > nul 
if %ERRORLEVEL% == 0 goto ver_xp 

ver | find "2000" > nul 
if %ERRORLEVEL% == 0 goto ver_2000 

ver | find "NT" > nul 
if %ERRORLEVEL% == 0 goto ver_nt 

if not exist %SystemRoot%\system32\systeminfo.exe goto warnthenexit 

systeminfo | find "OS Name" > %TEMP%\osname.txt 
FOR /F "usebackq delims=: tokens=2" %%i IN (%TEMP%\osname.txt) DO set vers=%%i 

echo %vers% | find "Windows 7" > nul 
if %ERRORLEVEL% == 0 goto ver_7 

echo %vers% | find "Windows Server 2008" > nul 
if %ERRORLEVEL% == 0 goto ver_2008 

echo %vers% | find "Windows Vista" > nul 
if %ERRORLEVEL% == 0 goto ver_vista 

goto warnthenexit 

:ver_7 
:Run Windows 7 specific commands here. 
echo Windows 7 
goto exit 

:ver_2008 
:Run Windows Server 2008 specific commands here. 
echo Windows Server 2008 
goto exit 

:ver_vista 
:Run Windows Vista specific commands here. 
echo Windows Vista 
goto exit 

:ver_2003 
:Run Windows Server 2003 specific commands here. 
echo Windows Server 2003 
goto exit 

:ver_xp 
:Run Windows XP specific commands here. 
echo Windows XP 
goto exit 

:ver_2000 
:Run Windows 2000 specific commands here. 
echo Windows 2000 
goto exit 

:ver_nt 
:Run Windows NT specific commands here. 
echo Windows NT 
goto exit 

:warnthenexit 
echo Machine undetermined. 

:exit 

vers.bat 그리고 명령 프롬프트에서 실행되는 후가 % windir % \로 파일을 저장 어떤 버전의 Windows.

+0

이 원 ' XP Embedded에서 동일한 명령을 사용하고 있지만 find.exe는 XPe에 포함되어 있지 않습니다 ... 원래 말한 것처럼. 내 스크립트는 XPe 이외의 모든 OS에서 정상적으로 작동하기 때문에. – Brian

0

이 시도 : Aacini ©

@echo off 
setlocal EnableDelayedExpansion 

::Identify OS 
for /F "delims=" %%a in ('ver') do set ver=%%a 
set Version= 
for %%a in (95=95 98=98 ME=ME NT=NT 2000=2000 5.1.=XP 5.2.=2003 6.0.=Vista 6.1.=7 6.2.=8) do (
    if "!Version!" equ "this" (
     set Version=Windows %%a 
    ) else if "!ver: %%a=!" neq "%ver%" (
     set Version=this 
    ) 
) 

::Identify bit 
if exist "%SYSTEMDRIVE%\Program Files (x86)" (
    set Type=64 bit 
) else (
    set Type=32 bit 
) 

::Display result 
echo %Version% %Type% 

dostips

+0

더 간단한 버전을 사용하고 있지만 32/64 수표를 좋아합니다 : '존재한다면'% programfiles (x86) % "goto x64" – Brian

+0

내 Win7에서 IF 문을 알아 내려고하고 있습니다. 이 부분을 알아 낸다. 6.1 "."또는 "equ"7 "'을 넣어도 문제가되지 않습니다. 또한 다중 IF없이 여러 값 (XP, 2003 등)에 대해이 작업을 수행 할 수 있습니까? 감사. – Brian

+0

그것은 Windows 95에서 Win 8 95 = 95 98 = 98 ME = ME NT = NT 2000 = 2000 5.1. = XP 5.2. = 2003 6.0. = Vista 6.1. = 7 6.2. = 8'에서 작동합니다. [here] (http://www.dostips.com/forum/viewtopic.php?p=24774#p24774)도 참조하십시오. – Endoro