The code segment below is a direct replacement of your original code that don't require find.exe
:
for /F "delims=" %%a in ('ver') do set ver=%%a
if "%ver:5.=%" neq "%ver%" goto WinXP
goto Win7
Pergunta
I have an install script that needs to behave differently if running on XP/2003 or 7/R2, and it's been working perfectly fine. UNTIL a couple weeks ago I found out that it doesn't run on XPe (works fine on 7e), turns out find.exe is not included in XPe.
My current script uses:
ver | find "5." > nul
if %ERRORLEVEL% == 0 goto WinXP
goto Win7
I borrowed a colleagues XPe device to test a workable solution, I tried copying find.exe from XP Pro, but it still didn't work. I tried varying versions (full path to findxp.exe, with/without .exe) of this, but it still doesn't work. Here's the output from XPe.
ver | findxp.exe "5." 1>nul
The system cannot find the file specified.
All I really care to determine is if it's XP/2003, otherwise I'm assuming it's Vista (ha ha) or 2008 or newer. Although I wouldn't object to a solution that told me if it was XPe, I guess that may or may not come in handy in the future, although it would probably make the script slighly more complicated as it would have to account for all versions of Windows.
Thanks, Brian
Solução
The code segment below is a direct replacement of your original code that don't require find.exe
:
for /F "delims=" %%a in ('ver') do set ver=%%a
if "%ver:5.=%" neq "%ver%" goto WinXP
goto Win7
Outras dicas
@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
Check it out below. Also, you can access it here: 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
Save the file as %WINDIR%\vers.bat
And after that run from the command prompt:
vers
This will display which version of Windows.
Try this:
@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%