我正在创建一个脚本,用于为相应的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%
。
笔记:
我们不能在字符串比较中使用正则表达式,不支持它们。
该for
命令仅检索操作系统的第3部分(令牌)。这将适用于台式机版本(如果要将Server 2008与其他版本区分开,则需要找到其他解决方案)。
_os
将被设置为以下值中的一个Server
,Vista
,7
,8
,或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
笔记:
goto
陈述也得到了修复。使用以下批处理文件(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] 删除。
我来说两句