用于为相应的Windows版本安装Service Pack的脚本

约翰1256

我正在创建一个脚本,用于为相应的Windows版本安装Service Pack。

因此,我希望脚本确定我所使用的Windows版本并安装Service Pack,然后执行命令以启动Service Pack安装程序

我知道我可以做得到wmic os get Caption窗口版本和wmic os get ServicePackMajorVersion获得服务包。

而且我可以start /wait %~dp0\servicepack.exe启动Service Pack,但是我不知道如何将这些命令放在一起,因此,如果我在没有Service Pack的Windows 7上,它将安装Windows 7 Service Pack,但是如果我在Windows上服务器将安装Windows服务器Service Pack。有什么想法吗?

因此,我做了一些研究,并提出了以下建议:

wmic os get Caption
if /i {Caption}=={Microsoft Windows Server 2008 *} goto :WinS
if /i {Caption}=={Microsoft Windows Vista *} goto :WinV
if /i {Caption}=={Microsoft Windows 7 *} goto :Win7
if /i {Caption}=={Microsoft Windows 8 *} goto :Win8
if /i {Caption}=={Microsoft Windows 8.1 *} goto :Win8.1
echo Windows Version not Suported! 
pause 
exit

:WinS
wmic os get ServicePackMajorVersion
if /i {ServicePackMajorVersion}=={0} start /wait %~dp0\servicepackSV1.exe
if /i {ServicePackMajorVersion}=={1} start /wait %~dp0\servicepackSV2.exe 
if /i {ServicePackMajorVersion}=={2} goto :GoodtoGo 
echo Service Pack Installed!!
goto :
:WinV
wmic os get ServicePackMajorVersion
if /i {ServicePackMajorVersion}=={0} start /wait %~dp0\servicepackSV1.exe
if /i {ServicePackMajorVersion}=={1} start /wait %~dp0\servicepackSV2.exe 
if /i {ServicePackMajorVersion}=={2} goto :GoodtoGo 
echo Service Pack Installed!!
goto :
:Win7
wmic os get ServicePackMajorVersion
if /i {ServicePackMajorVersion}=={0} start /wait %~dp0\servicepack7.exe 
if /i {ServicePackMajorVersion}=={1} goto :GoodtoGo 
echo Service Pack Installed!!
goto :
:Win8
echo No service pack needed!
goto 
:Win8.1
wmic qfe get hotfixid | find "KB2919355"
if %errorlevel%==0 goto :GoodtoGo
start /wait %~dp0\win8.exe
goto :
:GoodtoGo
echo The Latest ServicePack is allready installed! you'r GoodtoGo!
goto

我还没有测试过,但是行得通吗?

戴维·波斯蒂尔

我不知道如何将这些命令放在一起

我知道我可以做:

   wmic os get Caption

获取窗口版本和:

   wmic os get ServicePackMajorVersion

获取服务包。

您确实可以wmic用来检索这些值。但是,为了以后在批处理文件中(例如在if表达式中)使用它们,您需要将值存储在环境变量中。

这是如何执行此操作的示例:

@echo off
setlocal
setlocal enabledelayedexpansion
set _os=
set _sp=
rem use findstr to strip blank lines from wmic output
for /f "usebackq skip=1 tokens=3" %%i in (`wmic os get caption ^| findstr /r /v "^$"`) do (
  set "_os=%%i"
  )
for /f "usebackq skip=1 tokens=*" %%i in (`wmic os get ServicePackMajorVersion ^| findstr /r /v "^$"`) do (
  set "_sp=%%i"
  )
echo Operating System: %_os%
echo Service Pack Major Version: %_sp%
endlocal

现在,我们将操作系统存储在中%_os,将Service Pack主要版本存储在中%_sp%

笔记:

  1. 我们不能在字符串比较中使用正则表达式,不支持它们。

  2. for命令仅检索操作系统的第3部分(令牌)。这将适用于台式机版本(如果要将Server 2008与其他版本区分开,则需要找到其他解决方案)。

  3. _os将被设置为以下值中的一个ServerVista78,或8.1,所以正则表达式不再需要。

接下来,我们需要更改if语句,以便它们使用存储的变量并正确执行字符串比较。

if /i {Caption}=={Microsoft Windows Server 2008 *} goto :WinS

变成:

if /i "%_os%" == "Server" goto :WinS

等等。

放在一起,使用以下批处理文件:

@echo off
setlocal
setlocal enabledelayedexpansion
set _os=
set _sp=
rem use findstr to strip blank lines from wmic output
for /f "usebackq skip=1 tokens=3" %%i in (`wmic os get caption ^| findstr /r /v "^$"`) do (
  set "_os=%%i"
  )
for /f "usebackq skip=1 tokens=1" %%i in (`wmic os get ServicePackMajorVersion ^| findstr /r /v "^$"`) do (
  set "_sp=%%i"
  )
echo Operating System: %_os%
echo Service Pack Major Version: %_sp%

if /i "%_os%" == "7" echo Win7

if /i "%_os%" == "Server" goto :WinS
if /i "%_os%" == "Vista"  goto :WinV
if /i "%_os%" == "7"      goto :Win7
if /i "%_os%" == "8"      goto :Win8
if /i "%_os%" == "8.1"    goto :Win8.1
echo Windows Version not Supported! 
pause 
goto :eof

:WinS
if /i "%_sp%" == "0" start /wait %~dp0\servicepackSV1.exe
if /i "%_sp%" == "1" start /wait %~dp0\servicepackSV2.exe 
if /i "%_sp%" == "2" goto :GoodtoGo 
echo Service Pack Installed!!
goto :eof

:WinV
if /i "%_sp%" == "0" start /wait %~dp0\servicepackSV1.exe
if /i "%_sp%" == "1" start /wait %~dp0\servicepackSV2.exe 
if /i "%_sp%" == "2" goto :GoodtoGo 
echo Service Pack Installed!!
goto :eof

:Win7
if /i "%_sp%" == "0" start /wait %~dp0\servicepack7.exe 
if /i "%_sp%" == "1" goto :GoodtoGo 
echo Service Pack Installed!!
goto :eof

:Win8
echo No service pack needed!
goto :eof

:Win8.1
wmic qfe get hotfixid | find "KB2919355"
if %errorlevel%==0 goto :GoodtoGo
start /wait %~dp0\win8.exe
goto :eof

:GoodtoGo
echo The Latest ServicePack is already installed!
goto :eof

endlocal

笔记:

  • 没有经过完全测试,因为我没有所有的OS和SP组合都可以对其进行测试。
  • 一些不完整的goto陈述也得到了修复。

那32位和64位呢?如何确定我是哪个系统?

使用以下批处理文件(GetBits.cmd):

@echo off
setlocal enabledelayedexpansion
for /f "usebackq skip=1 tokens=*" %%i in (`wmic OS get OSArchitecture ^| findstr /r /v "^$"`) do (
  set "_bits=%%i"
  )
echo %_bits%
endlocal

输出示例:

F:\test>GetBits
64-bit

F:\test>

进一步阅读

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用'yes'安装X-Pack时用于安装Elasticsearch的Shell脚本引发错误

来自分类Dev

在本地服务器上使用Powershell脚本应用Service Pack(.msu文件)更新

来自分类Dev

在本地服务器上使用Powershell脚本应用Service Pack(.msu文件)更新

来自分类Dev

Windows 7 Service Pack 1未安装

来自分类Dev

Windows 7 Service Pack 1 .exe来自现有安装?

来自分类Dev

用于检查Android版本然后进行安装的脚本?

来自分类Dev

HTML Agility Pack:替换脚本标签

来自分类Dev

如何找到Windows Feature Experience Pack的版本?

来自分类Dev

如何找到Windows Feature Experience Pack的版本?

来自分类Dev

启动条件:带有OS位的Windows OS Service Pack版本

来自分类Dev

启动条件:带有OS位的Windows OS Service Pack版本

来自分类Dev

Windows 10是否有Service Pack?

来自分类Dev

Slipstream Windows 7 + Service Pack 1

来自分类Dev

Windows XP Service Pack是累积性的吗?

来自分类Dev

在没有Internet连接的PC上安装Windows XP Service Pack 3

来自分类Dev

在哪里可以找到Windows 7 Service Pack 1的独立安装程序?

来自分类Dev

Windows 7 Enterprise Service Pack 32位操作系统上的MongoDB安装

来自分类Dev

安装Windows 7 Service Pack 1后启动时出现蓝屏

来自分类Dev

为ffmpeg安装python脚本

来自分类Dev

命令接受VirtualBox PUEL(用于virtualbox-ext-pack安装)?

来自分类Dev

如何确定安装了哪个Office 2007 Service Pack?

来自分类Dev

SQL Server Service Pack 的静默安装无法使用参数

来自分类Dev

installshield Service Pack系统要求

来自分类Dev

用于更改NVM节点版本的Bash脚本

来自分类Dev

Windows批处理文件运行Python脚本来检查已安装的软件包版本?

来自分类Dev

在已经双重启动的Windows 7和ubuntu 14.04上安装Service Pack 1更新是否安全?

来自分类Dev

如何检测系统上安装的Windows Media Pack

来自分类Dev

如何安装Windows Media Feature Pack?(游戏要求)

来自分类Dev

Windows 8.1 Pro Pack安装失败,并显示“出了点问题”

Related 相关文章

  1. 1

    使用'yes'安装X-Pack时用于安装Elasticsearch的Shell脚本引发错误

  2. 2

    在本地服务器上使用Powershell脚本应用Service Pack(.msu文件)更新

  3. 3

    在本地服务器上使用Powershell脚本应用Service Pack(.msu文件)更新

  4. 4

    Windows 7 Service Pack 1未安装

  5. 5

    Windows 7 Service Pack 1 .exe来自现有安装?

  6. 6

    用于检查Android版本然后进行安装的脚本?

  7. 7

    HTML Agility Pack:替换脚本标签

  8. 8

    如何找到Windows Feature Experience Pack的版本?

  9. 9

    如何找到Windows Feature Experience Pack的版本?

  10. 10

    启动条件:带有OS位的Windows OS Service Pack版本

  11. 11

    启动条件:带有OS位的Windows OS Service Pack版本

  12. 12

    Windows 10是否有Service Pack?

  13. 13

    Slipstream Windows 7 + Service Pack 1

  14. 14

    Windows XP Service Pack是累积性的吗?

  15. 15

    在没有Internet连接的PC上安装Windows XP Service Pack 3

  16. 16

    在哪里可以找到Windows 7 Service Pack 1的独立安装程序?

  17. 17

    Windows 7 Enterprise Service Pack 32位操作系统上的MongoDB安装

  18. 18

    安装Windows 7 Service Pack 1后启动时出现蓝屏

  19. 19

    为ffmpeg安装python脚本

  20. 20

    命令接受VirtualBox PUEL(用于virtualbox-ext-pack安装)?

  21. 21

    如何确定安装了哪个Office 2007 Service Pack?

  22. 22

    SQL Server Service Pack 的静默安装无法使用参数

  23. 23

    installshield Service Pack系统要求

  24. 24

    用于更改NVM节点版本的Bash脚本

  25. 25

    Windows批处理文件运行Python脚本来检查已安装的软件包版本?

  26. 26

    在已经双重启动的Windows 7和ubuntu 14.04上安装Service Pack 1更新是否安全?

  27. 27

    如何检测系统上安装的Windows Media Pack

  28. 28

    如何安装Windows Media Feature Pack?(游戏要求)

  29. 29

    Windows 8.1 Pro Pack安装失败,并显示“出了点问题”

热门标签

归档