批处理文件,用于确定XP Embedded上的Windows版本

时间:2013-05-06 17:51:28

标签: batch-file windows-xp-embedded

我有一个安装脚本,如果在XP / 2003或7 / R2上运行需要表现不同,而且它的工作完全正常。几个星期前,我发现它不能在XPe上运行(在7e上工作正常),结果发现find.exe不包含在XPe中。

我当前的脚本使用:

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

我借了一个同事XPe设备测试一个可行的解决方案,我尝试从XP专业版复制find.exe,但它仍然无法正常工作。我尝试了不同的版本(findxp.exe的完整路径,有/没有.exe),但它仍然无法正常工作。这是XPe的输出。

ver   | findxp.exe "5."  1>nul
The system cannot find the file specified.

所有我真正关心的是它是否是XP / 2003,否则我假设它是Vista(哈哈)或2008或更新。虽然我不反对告诉我它是否是XPe的解决方案,但我想这可能会或者可能不会在将来派上用场,虽然它可能会使脚本变得更加复杂,因为它必须考虑到所有版本Windows。

谢谢, 布赖恩

4 个答案:

答案 0 :(得分:2)

以下代码段可直接替换不需要find.exe的原始代码:

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

答案 1 :(得分: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

答案 2 :(得分:0)

在下面查看。此外,您可以在此处访问它: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

将文件另存为%WINDIR%\ vers.bat

然后从命令提示符运行:

vers

这将显示哪个版本的Windows。

答案 3 :(得分:0)

试试这个:

@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%

©Aacini dostips