Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

OS Betriebssystem, XP, Vista, Windows 7, Windows 8 per Batch bestimmen

Frage Entwicklung Batch & Shell

Mitglied: smarties

smarties (Level 1) - Jetzt verbinden

06.04.2007, aktualisiert 15.01.2013, 21126 Aufrufe, 11 Kommentare

@edit: Das Batch Script läuft seit Jahren Problemlos auf tausenden Rechnern.
@edit2: jetzt auch für Vista und Windows 7.
@edit3: jetzt auch für Windows 8.

Hi,

Ich benötige eine Batchdatei die die verschiedene Version von Windows unterscheidet.

Bis vor kurzem reichte mir das ganze für NT, 9x, ME, 2000 und XP. Aber nun brauche ich auch zusätzlich noch etwas für Vista und 2003.

Ich habe mir folgendes gedacht, und möchte fragen ob Ihr da etwas besseres habt oder kennt.

Danke


Mit freundlichen Grüßen
smarties

01.
@echo off 
02.
 
03.
rem diese Batch prueft das OS 
04.
 
05.
VER |find /i "Windows 95" >NUL 
06.
IF NOT ERRORLEVEL 1 GOTO 95 
07.
VER |find /i "Windows 98" >NUL 
08.
IF NOT ERRORLEVEL 1 GOTO 98 
09.
VER |find /i "Windows Millennium" >NUL 
10.
IF NOT ERRORLEVEL 1 GOTO ME 
11.
VER | find "XP" > nul 
12.
IF %errorlevel% EQU 0 GOTO XP 
13.
VER | find "2000" > nul 
14.
IF %errorlevel% EQU 0 GOTO 2000 
15.
VER | find "NT" > nul 
16.
IF %errorlevel% EQU 0 GOTO NT 
17.
VER | find "Microsoft Windows [Version 6.0" > nul 
18.
IF %errorlevel% EQU 0 GOTO Vista 
19.
VER | find "Microsoft Windows [Version 6.1" > nul 
20.
IF %errorlevel% EQU 0 GOTO W7 
21.
VER | find "Microsoft Windows [Version 6.2" > nul 
22.
IF %errorlevel% EQU 0 GOTO W8 
23.
VER | find "Microsoft Windows [Version 5" > nul 
24.
IF %errorlevel% EQU 0 GOTO 2003 
25.
goto unknown 
26.
goto end 
27.
 
28.
:unknown 
29.
echo unknown 
30.
goto end 
31.
 
32.
:95 
33.
echo 95 
34.
goto end 
35.
 
36.
:98 
37.
echo 98 
38.
goto end 
39.
 
40.
:ME 
41.
echo ME 
42.
goto end 
43.
 
44.
:NT 
45.
echo NT 
46.
goto end 
47.
 
48.
:2000 
49.
echo 2000 
50.
goto end 
51.
 
52.
:XP 
53.
echo XP 
54.
goto end 
55.
 
56.
:Vista 
57.
echo Vista 
58.
goto end 
59.
 
60.
:W7 
61.
echo W7 
62.
goto end 
63.
 
64.
:W8 
65.
echo W8 
66.
goto end 
67.
 
68.
:2003 
69.
echo 2003 
70.
goto end 
71.
 
72.
:end 
73.
 
Mitglied: Biber
10.04.2007 um 10:15 Uhr
Moin smarties,

im Bereich Batch und Shell haben wir dazu auch eine Musterskizze stehen GetOsVersion.vbs - Betriebssystem sowie Versionsnummer per Skript bestimmen.

Ich hab dort auch die Vista-Prüfung ergänzt.

Die Skizzen in dem anderen Beitrag sind Deinem Schnipsel (Danke fürs Posten!) vergleichbar.
Heißt: Viel eleganter geht es meines Wissens nicht- es existiert weder eine abprüfbare Umgebungsvariable noch gibt irgendeine Betriebssystemanweisung ein ("ENUM-") Errorlevel 1 bis 12 zurück je nach OS-Version.

Gruss
Biber
Bitte warten ..
Mitglied: smarties
10.04.2007 um 14:53 Uhr
Hi,

danke für Deine Antwort.

Ich habe leider zur Zeit keine Möglichkeit die Batch mit Vista und 2003 zu testen, daher sind das nur angenommenen Werte.

Wäre vielleicht mal jemand so freundlich die Batch unter 2003 und Vista zu testen und mir zu sagen ob das richtige rauskommt?

Danke.
Bitte warten ..
Mitglied: jschneider
10.10.2007 um 16:27 Uhr
zumindest für Vista kann ich dir grünes Licht geben
Bitte warten ..
Mitglied: zensbert
05.09.2008 um 21:24 Uhr
oder mit in einer Batch:
01.
FOR /F "tokens=2* delims=	 " %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName') DO SET BS=%%B 
02.
echo %BS%|findstr "Vista">nul && Echo Vista erkannt!
Bitte warten ..
Mitglied: smarties
05.09.2008 um 22:27 Uhr
Zitat von zensbert:
oder mit in einer Batch:
01.
> FOR /F "tokens=2* delims=	 " %%A IN ('REG QUERY 
02.
> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v 
03.
> ProductName') DO SET BS=%%B 
04.
> echo %BS%|findstr "Vista">nul && Echo Vista 
05.
> erkannt! 
06.
> 
Danke für Deine Antwort nach über 1 Jahr ??

Aber inzwischen funktioniert die Batch, so wie sie oben steht, bei allen Windows-Versionen einwandfrei. Das habe ich bereits auf tausenden Kunden-PC getestet.
Bitte warten ..
Mitglied: Soidberg
10.07.2009 um 11:45 Uhr
Hallo,

das ganze funktioniert sehr gut mit den bereits inkludierten OS-Versionen. Ich muss in einer Batch allerdings auch Windows Server 2008 unterbringen.

Das Problem ist das Windows Server 2008 sich per "VER" als "Microsoft Windows [Version 6" ausgibt und somit als Vista identifiziert wird.

Ich muss allerdings zwischen Server und Clients unterscheiden. Alle Server (egal welches OS) müssen unebrührt bleiben.

Gibt es eventuell einen Ordner oder einen anderen Anhaltspunkt mit dem sich das ganze identifizieren lässt?

LG Soidberg
Bitte warten ..
Mitglied: 80220
10.07.2009 um 11:57 Uhr
Vista selbst kannst du anhand der Existenz der Umgebungsvariablen LOCALAPPDATA erkennen, die gibt es bei den Vorversionen nicht. Wodurch sich in Vista Server- und Clientversionen anhand von Umgebungsvariablen einfach erkennbar unterscheiden, weiß ich nicht.

Du kannst dich aber mal hiermit versuchen.

<OT>Hallo, Frank *wink*</OT>
Bitte warten ..
Mitglied: smarties
22.07.2009 um 14:35 Uhr
Hi,

was genau gibt Server 2008 denn aus wenn Du ver eingibst?

Vista gibt z.B folgendes aus:
Microsoft Windows [Version 6.0.6002]

Mit freundlichen Grüßen
smarties
Bitte warten ..
Mitglied: Soidberg
22.07.2009 um 17:25 Uhr
Zitat von smarties:
Hi,

was genau gibt Server 2008 denn aus wenn Du ver eingibst?

Vista gibt z.B folgendes aus:
Microsoft Windows [Version 6.0.6002]

Mit freundlichen Grüßen
smarties

Hy, siehe hier:

>Das Problem ist das Windows Server 2008 sich per "VER" als "Microsoft Windows [Version 6" ausgibt und somit >als Vista identifiziert wird.

Ich habe nun einen anderen "gefundenen" Schnipsel verwendet:

01.
@ECHO On 
02.
 
03.
:: CHECKOS 
04.
call :FncWinVer -e "2000" "2003" "2008" && goto SERVER 
05.
call :FncWinVer -e ":::::64" && goto SERVER 
06.
for /F "tokens=1-6 delims=:" %%a in ("%_x%") do ( 
07.
  echo Operating System... %%a   
08.
  echo Version............ %%b   
09.
  echo Product Suite...... %%c   
10.
  echo Localization....... %%d   
11.
  echo Service Pack....... %%e   
12.
  echo Architecture....... %%f   
13.
14.
 
15.
goto START 
16.
 
17.
::FUNKTIONSROUTINE 
18.
:FncWinVer 
19.
setlocal EnableDelayedExpansion & set "_#SP=SP0" & set "_#OSEX1=NonSuite" & set "_#TMP=" & set "_#EL=0" & set "_#Prd=unknown system" 
20.
  if exist "%systemroot%\system32\prodspec.ini" ( ::Name und Sprache ermitteln; NT3 bis Windows 2008 
21.
    for /F "tokens=1* delims==" %%a in ('type "%systemroot%\system32\prodspec.ini"') do ( 
22.
      if /i "%%a" == "Product"      set _#Prd=%%b 
23.
      if /i "%%a" == "Localization" set _#Lang=%%b 
24.
25.
  ) else ( ::ab Vista 
26.
    set _#Lang=%LC_LANG% 
27.
    set _#TmpPrdFile=%TMP:"=%\%~n0_Prd%RANDOM%.tmp  &::Da der ProductName, z.B. "Vista (TM)", auch Klammern enthalten kann... 
28.
    for /f "tokens=2,* delims=	 " %%a in ('%SYSTEMROOT%\system32\reg.exe query 
29.
                                            "HKLM\Software\Microsoft\Windows NT\CurrentVersion" 
30.
                                            /v "ProductName" 2^>NUL ^| find /i "ProductName"') do (echo."%%b") > "!_#TmpPrdFile!" 
31.
    set /p "_#Prd=" < "!_#TmpPrdFile!" &::... wird die Variablen-Zuweisung ueber diesen Umweg vorgenommen. 
32.
    set "_#Prd=!_#Prd:(=!" & set "_#Prd=!_#Prd:)=!" & set "_#Prd=!_#Prd:"=!" 
33.
    del "!_#TmpPrdFile!" 
34.
35.
   
36.
  if exist "%windir%\SysWOW64" ( set "_#Bit=64 bit" ) else ( set "_#Bit=32 bit" ) 
37.
 
38.
  set "_#Prd=%_#Prd:NT Workstation 4.=NT4 Workstation 4.%" & set "_#Prd=%_#Prd:NT Server 4.=NT4 Server 4.%" 
39.
  set "_#Prd=%_#Prd:NT Workstation 3.=NT3 Workstation 3.%" & set "_#Prd=%_#Prd:NT Server 3.=NT3 Server 3.%" 
40.
   
41.
  if not exist "%SYSTEMROOT%\system32\reg.exe" ( ::NT3, NT4 und w2k kennen keine reg.exe, daher... 
42.
    set _#TmpRegFile=%TMP:"=%\%~n0_RegExport%RANDOM%.tmp 
43.
    %SYSTEMROOT%\regedit.exe /E "!_#TmpRegFile!" "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion" 
44.
    type "!_#TmpRegFile!" > "!_#TmpRegFile!_ANSI-Format" 
45.
    rem Von den ca. 60.000 rekursiv exportierten Registry-Zeilen die ersten 100 Zeilen extrahieren... 
46.
    (for /L %%i in (1,1,100) do set /p "_x=" & echo.!_x!) <"!_#TmpRegFile!_ANSI-Format" >"!_#TmpRegFile!" 
47.
    rem ...damit die nun folgende for-Schleife wesentlich schneller abgearbeitet werden kann: 
48.
    for /f "tokens=1,2,4 delims==	 " %%a in ('type "!_#TmpRegFile!"') do ( 
49.
        if /i %%a == "CSDVersion"         set _#SP=SP%%c 
50.
        if /i %%a == "CurrentVersion"     set _#Ver=%%b 
51.
        if /i %%a == "CurrentBuildNumber" set _#Build=%%b 
52.
53.
    del "!_#TmpRegFile!" "!_#TmpRegFile!_ANSI-Format" 
54.
    set _#OSEX1=NT3_NT4_or_2000=Product Suite can not be identified 
55.
  ) else ( ::Windows XP, 2003 oder hoeher... (reg.exe ist schneller und kann MULTI_SZ "ProductSuite" auslesen) 
56.
    for /f "tokens=1,3,5 delims=	 " %%a in ('%SYSTEMROOT%\system32\reg.exe query 
57.
                                              "HKLM\Software\Microsoft\Windows NT\CurrentVersion" 2^>NUL') do ( 
58.
      if /i "%%a" == "CSDVersion"         set _#SP=SP%%c 
59.
      if /i "%%a" == "CurrentVersion"     set _#Ver=%%b 
60.
      if /i "%%a" == "CurrentBuildNumber" set _#Build=%%b 
61.
62.
    for /f "tokens=2,* delims=	 " %%a in ('%SYSTEMROOT%\system32\reg.exe query 
63.
                                            "HKLM\System\CurrentControlSet\Control\ProductOptions" 
64.
                                            /v "ProductSuite" 2^>NUL ^| find /i "ProductSuite"') do set _#TMP=%%b 
65.
    if defined _#TMP set _#TMP=!_#TMP:\0\0=! 
66.
    if defined _#TMP set _#TMP=!_#TMP:\0=, ! 
67.
    if defined _#TMP if not "!_#TMP!" == ", " set _#OSEX1=!_#TMP! 
68.
69.
 
70.
  set _#TMP=%_#Prd:*Terminal Server Edition=Found_% 
71.
  if "%_#TMP:~0,6%" == "Found_" ( ::zur Vereinheitlichung: unter NT4 den Prd-TS-Eintrag nach ProductSuite verschieben 
72.
    set _#Prd=%_#Prd: Terminal Server Edition=% 
73.
    set _#OSEX1=Terminal Server Edition, %_#OSEX1% 
74.
75.
 
76.
  set "_#OS_Info=%_#Prd%:%_#Ver% Build %_#Build%:%_#OSEX1%:%_#Lang%:%_#SP%:%_#Bit%" & set "_#OS_Info=!_#OS_Info:"=!" 
77.
   
78.
  if "%~1" == "" ( 
79.
    echo %_#OS_Info% 
80.
    goto :LEB_FncWinVer_END 
81.
  ) else if "%~1" == "-s" ( 
82.
    endlocal & set "%~2=%_#OS_Info%" & exit /b %_#EL% 
83.
  ) else if not "%~1" == "-e" ( 
84.
    set _#EL=2 & goto :LEB_FncWinVer_END 
85.
  )  
86.
  set _#EL=1 
87.
  :LOOP_FncWinVer_NextOS   ::Option -e gefunden (es soll gestestet werden, ob das aktuelle Betriebssystem bestimmte Bedingungen erfuellt) 
88.
    shift 
89.
    set "_#InfoLST=%_#OS_Info%:#END#" & set "_#ParLST=%~1:#END#" 
90.
    :LOOP_FncWinVer_NextDetail 
91.
      set "_#InfoITM=%_#InfoLST%"                 &rem die OS-Info-Liste (z.B. "Windows XP Professional:5.1 Build 2600:...") auseinandernehmen... 
92.
      set "_#InfoLST=%_#InfoLST:*:=%"             &rem "*:=" loescht alles bis zum Aufkommen des ersten ":"-Zeichens; uebrig bleibt der rechte Teilstring 
93.
      if not "%_#InfoITM%" == "%_#InfoLST%" ( 
94.
        set "_#InfoITM=!_#InfoITM::%_#InfoLST%=!" &rem InfoITM=erster Eintrag (entspricht urspruengliche Liste abzueglich rechtem Teilstring) 
95.
96.
      set "_#ParITM=%_#ParLST%"                   &rem Den Suchstring (z.B. "XP:::SP2:#END#") auseinandernehmen... 
97.
      set "_#ParLST=%_#ParLST:*:=%"               &rem "*:=" loescht alles bis zum Aufkommen des ersten ":"-Zeichens; uebrig bleibt der rechte Teilstring 
98.
      if not "%_#ParITM%" == "%_#ParLST%" ( 
99.
        set "_#ParITM=!_#ParITM::%_#ParLST%=!"    &rem ParITM=erster Eintrag (entspricht urspruengliche Liste abzueglich rechtem Teilstring) 
100.
101.
      if defined _#InfoITM if defined _#ParITM if not "%_#ParITM%"  == "#END#" ( 
102.
        set "_#InfoITM=!_#InfoITM:*%_#ParITM%=Found_!" 
103.
        if "!_#InfoITM:~0,6!" == "Found_" ( ::die Bedingung "ParITM kommt in InfoITM vor" ist fuer dieses Item erfuellt 
104.
          set "_#EL=0"  
105.
        ) else ( ::die erste Unstimmigkeit des Parameters wurde im aktuellen Item entdeckt 
106.
          set "_#EL=1"  
107.
          set "_#ParITM=#END#"                   &rem Weitersuchen nicht erforderlich; auf zum naechsten Parameter 
108.
109.
110.
    if not "%_#ParITM%"  == "#END#" if not "%_#InfoITM%" == "#END#" goto :LOOP_FncWinVer_NextDetail 
111.
  if not "%~2" == "" if not "%_#EL%" == "0" goto LOOP_FncWinVer_NextOS 
112.
  :LEB_FncWinVer_END 
113.
 endlocal & exit /b %_#EL% 
114.
 
115.
 
116.
:SERVER 
117.
cls 
118.
echo. 
119.
echo Server oder 64-Bit System gefunden! Vorgang wird abgebrochen! 
120.
ping -n 4 127.0.0.1 > NUL 
121.
goto eof 
122.
 
123.
 
124.
:START 
125.
cls 
126.
echo. 
127.
echo Worstation 32-Bit gefunden, UPDATEVORGANG von Adobe Reader wird nun gestartet...
LG Soidberg
Bitte warten ..
Mitglied: smarties
23.12.2009 um 23:41 Uhr
Hi,

ich habe die Erkennung für Windows 7 ergänzt.

Gruß
smarties
Bitte warten ..
Mitglied: smarties
15.01.2013, aktualisiert um 12:21 Uhr
Hi,

ich habe die Erkennung für Windows 8 ergänzt.

Gruß
smarties
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Sonstige Systeme
Kaspersky OS: Kaspersky stellt eigenes Betriebssystem vor (2)

Link von tomolpi zum Thema Sonstige Systeme ...

Batch & Shell
gelöst Windows Update Dienst per Batch beenden (12)

Frage von Justin98 zum Thema Batch & Shell ...

Mac OS X
gelöst Statt ein OS X ein Windows 10 (21)

Frage von gamiiii zum Thema Mac OS X ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...