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 wmic
diese Werte tatsächlich verwenden . Um sie jedoch später in Ihrer Batchdatei verwenden zu können (zum Beispiel in einem if
Ausdruck), 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 %_os
und die Service Pack-Hauptversion gespeichert %_sp%
.
Anmerkungen:
Wir können reguläre Ausdrücke nicht in einem Stringvergleich verwenden, sie werden nicht unterstützt.
Der
for
Befehl 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)._os
wird auf einen der folgenden Werte gesetztServer
,Vista
,7
,8
, oder8.1
, so ein regulärer Ausdruck nicht mehr benötigt wird .
Als Nächstes müssen wir die if
Anweisungen 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
goto
Aussagen 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
- Ein AZ-Index der Windows-CMD-Befehlszeile - Eine hervorragende Referenz für alles, was mit Windows-Cmd-Zeilen in Verbindung steht.
- findstr - Suche nach Zeichenketten in Dateien.
- for / f - Schleifenbefehl gegen die Ergebnisse eines anderen Befehls.
- if - Bedingt einen Befehl ausführen.
- wmic - Befehl zur Windows-Verwaltungsinstrumentation.