Skript zum Installieren des Service Packs für die entsprechende Windows-Version

8828
John1256

Ich erstelle ein Skript zum Installieren des Service Packs für die entsprechende Windows-Version.

Ich möchte, dass das Skript die Windows-Version, in der ich bin, und das Service Pack installiert hat, und dann einen Befehl zum Starten des Service Pack-Installationsprogramms ausführt

Ich weiß, dass ich wmic os get Captiondie Fensterversion und wmic os get ServicePackMajorVersiondas Service Pack erhalten kann.

Ich kann start /wait %~dp0\servicepack.exeden Service Pack starten, weiß aber nicht, wie ich diese Befehle zusammenstellen soll. Wenn ich also unter Windows 7 ohne Service Pack bin, wird der Windows 7 Service Pack installiert, aber unter Windows Server installiert das Windows Server Service Pack. Irgendwelche Gedanken?

Also habe ich etwas recherchiert und mir das ausgedacht:

wmic os get Caption if /i == goto :WinS if /i == goto :WinV if /i == goto :Win7 if /i == goto :Win8 if /i == goto :Win8.1 echo Windows Version not Suported!  pause  exit  :WinS wmic os get ServicePackMajorVersion if /i == start /wait %~dp0\servicepackSV1.exe if /i == start /wait %~dp0\servicepackSV2.exe  if /i == goto :GoodtoGo  echo Service Pack Installed!! goto : :WinV wmic os get ServicePackMajorVersion if /i == start /wait %~dp0\servicepackSV1.exe if /i == start /wait %~dp0\servicepackSV2.exe  if /i == goto :GoodtoGo  echo Service Pack Installed!! goto : :Win7 wmic os get ServicePackMajorVersion if /i == start /wait %~dp0\servicepack7.exe  if /i == 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 

Ich habe das noch nicht getestet, aber wird es funktionieren?

2
Hinweis: [if] (http://ss64.com/nt/if.html) - Führen Sie einen Befehl unter bestimmten Bedingungen aus. DavidPostill vor 8 Jahren 0
Wie würde ich den Befehl "if" verwenden? John1256 vor 8 Jahren 0

1 Antwort auf die Frage

2
DavidPostill

Ich weiß nicht, wie ich diese Befehle zusammenstellen soll

Ich weiß ich kann:

 wmic os get Caption 

um die Fensterversion zu erhalten und:

 wmic os get ServicePackMajorVersion 

um das Service Pack zu erhalten.

Sie können wmicdiese Werte tatsächlich verwenden . Um sie jedoch später in Ihrer Batchdatei verwenden zu können (zum Beispiel in einem ifAusdruck), müssen Sie die Werte in einer Umgebungsvariablen speichern.

Hier ist ein Beispiel, wie das geht:

@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 

Nun haben wir das Betriebssystem in %_osund die Service Pack-Hauptversion gespeichert %_sp%.

Anmerkungen:

  1. Wir können reguläre Ausdrücke nicht in einem Stringvergleich verwenden, sie werden nicht unterstützt.

  2. Der forBefehl ruft nur den 3. Teil (Token) des Betriebssystems ab. Dies funktioniert für die Desktop-Versionen (wenn Sie Server 2008 von anderen Versionen unterscheiden möchten, müssen Sie nach einer anderen Lösung suchen).

  3. _oswird auf einen der folgenden Werte gesetzt Server, Vista, 7, 8, oder 8.1, so ein regulärer Ausdruck nicht mehr benötigt wird .

Als Nächstes müssen wir die ifAnweisungen so ändern, dass sie die gespeicherten Variablen verwenden und die Zeichenfolgenvergleiche korrekt ausführen.

if /i == goto :WinS 

wird:

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

usw.

Verwenden Sie die folgende Batch-Datei:

@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 

Anmerkungen:

  • Nicht vollständig getestet, da ich nicht alle Betriebssystem- und SP-Kombinationen zum Testen habe.
  • Einige defekte gotoAussagen wurden ebenfalls behoben.

Was ist mit 32 und 64 Bit. Wie kann ich feststellen, welches System ich bin?

Verwenden Sie die folgende Batchdatei (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 

Beispielausgabe:

F:\test>GetBits 64-bit  F:\test> 

Lesen Sie weiter

DavidPostill. Danke, ich werde das testen. John1256 vor 8 Jahren 0
@ John1256 Alles funktioniert gut? DavidPostill vor 8 Jahren 0
funktioniert gut! :) John1256 vor 8 Jahren 0
Was ist mit 32 und 64 Bit. Wie können wir feststellen, auf welchem ​​System Sie sich gerade befinden? John1256 vor 8 Jahren 0
@ John1256 Du hättest wirklich eine neue Frage stellen sollen. Ich fühle mich heute Morgen jedoch großzügig, also habe ich meine Antwort aktualisiert;) DavidPostill vor 8 Jahren 0