zensbert
Goto Top

64Bit Versionen verschiedener Windows-Distributionen per Batch erkennen

Hi,
Ich hab ein bischen gegoogelt, aber so eine richtig zufriedenstellende Lösung habe ich noch nicht.. Ich müsste per Batch erkennen können ob es eine 64Bit Version ist oder nicht und das leider in allen OS von XP bis 7. Die WMIC fällt flach da die auf den verschiedensten Versionen z.B. Vista Home nicht dabei ist und es auch nicht mit wmic rüberkopieren getan ist. Bevor ich mir hier 3 virtuelle Maschinen installiere frage ich mal lieber hier ob jemand schon den passenden Schnipsel in seinem Fundus hat, der mir da helfen kann. Ist es da am besten per systeminfo.exe auszulesen? OS lese ich per Registry aus und setze es in %BS%..

also als Beispiel:
set os64=0
(set bs=xp)
if %bs% == XP (Echo Windows XP erkannt)
if %bs% == XP (64 Bit-Prüfung, wenn ja set os64=1)
if %bs% == Vista (Echo Windows Vista erkannt)
if %bs% == Vista (64 Bit-Prüfung, wenn ja set os64=1)
if %bs% == 7 (Echo Windows 7 erkannt)
if %bs% == 7 (64 Bit-Prüfung, wenn ja set os64=1)
if %os64% == 1 (goto 64error)

Wenn ihr ein kleines CMD-Hilfestellungstool kennt oder sonst was immer her damit.. wäre auch kein problem- hauptsache kompatibel von XP bis Seven^^

Danke im Voraus..

Thomas

Content-ID: 132175

Url: https://administrator.de/contentid/132175

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

rubberman
rubberman 23.12.2009 um 00:16:20 Uhr
Goto Top
Hallo chizophren.

Hier: Getosversion.vbs - Betriebssystem sowie die Versionsnummer per Script bestimmen
findest du einiges darüber.

Die Environmentvariable %OS%
sowie die Befehle VER und NET CONFIG WORKSTATION
geben dir wertvolle Aufschlüsse.

Das VBScript aus dem verlinkten Beitrag mal in abgewandelter Form im Batch verwurstet sähe etwa so aus:
@echo off & setlocal
set "vbstool=%temp%\GetOsInfo.vbs"  
>"%vbstool%" echo Set colOperatingSystems = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_OperatingSystem")  
>>"%vbstool%" echo For Each objOperatingSystem in colOperatingSystems  
>>"%vbstool%" echo Wscript.Echo objOperatingSystem.Caption ^& ":" ^& objOperatingSystem.Version ^& ":" ^& objOperatingSystem.ServicePackMajorVersion ^& "." ^& objOperatingSystem.ServicePackMinorVersion  
>>"%vbstool%" echo Next  

for /f "delims=: tokens=1-3" %%a in ('cscript //nologo "%vbstool%"') do (  
  echo Name: %%a
  echo Version: %%b
  echo SevicePack: %%c
)

del "%vbstool%"  
pause

Wie/an welcher Stelle genau sich allerdings eine 32bit von einer 64bit - Version unterscheidet, weiß ich nicht. Vielleicht hast du Möglichkeiten das auszutesten.

Grüße
rubberman

<edit>
Mit den Versionsnummern sollte das OS recht eindeutig zu identifizieren sein. Hier eine Liste:
www.gaijin.at/lstwinver.php
Das Problem, ob nun 32 oder 64bit, scheint sich damit aber noch nicht klären zu lassen.
</edit>
Mad-Eye
Mad-Eye 23.12.2009 um 09:41:44 Uhr
Goto Top
Hi,

also am einfachsten ist es meines wissens zu prüfen ob der Ordner "Program Files (x86)" vorhanden ist. Dieser ist jedenfalls bei XP64, Vista und 7 immer da getestet bei englischer und deutscher Installation.

Gruß
Mad-Eye
DerWoWusste
DerWoWusste 23.12.2009 um 14:55:48 Uhr
Goto Top
Es gibt da eine Variable...
PROCESSOR_ARCHITECTURE
rubberman
rubberman 23.12.2009 um 16:58:19 Uhr
Goto Top
@DerWoWusste

Stimmt. Hat auf meiner 32bit Büchse den Wert x86. Wie sieht das auf einem 64bit System aus?

Grüße
rubberman

<edit>
Batch - Betriebssysteminformationen abfragen (auch ohne WSH) - NT, 200x, XP, Vista, ... - Name ink. Typ (Server, Home, etc.), Version, Product Suite (Terminal Server, etc.), Sprache und Windows Service Pack, 32 oder 64 Bit
In dem Beitrag werden wohl alle offenen Fragen beantwortet. Unter anderem auch, dass x86 für das 32bit System steht.
</edit>
zensbert
zensbert 27.12.2009 um 10:13:23 Uhr
Goto Top
danke an alle fleißigen schreiberlinge.. war nur die letzten tage weihnachtsabstinent.. die prozessur architektur muss ja nicht zwangsweise mit dem OS übereinstimmen. Hab auch ein 64Bit Prozi und nur 32bit laufen...

habe das jetzt so gelöst:

for /f "tokens=1,*" %%i in ('%windir%\system32\Systeminfo^|find "Systemtyp"') do set "Bitver=%%j"  
echo %Bitver%|findstr "86">nul && echo 32Bit  
echo %Bitver%|findstr "64">nul && echo 64Bit  

eine deutsche systeminfo.exe vorausgesetzt sollte die erkennung funktionieren.

Muss das noch auf ein paar Systemen austesten aber denke doch dass das klappen wird.. ansonsten gehe ich nach der "Program Files (x86)" Ordnerstruktur.

Guten Rutsch an alle..

Gruß Thomas
DerWoWusste
DerWoWusste 29.12.2009 um 16:46:14 Uhr
Goto Top
Hi.
die prozessur architektur muss ja nicht zwangsweise mit dem OS übereinstimmen
Doch. Schau Dir mal die Definition der Variable im Netz an, es geht nicht um den Prozessor, sondern um das OS. Zugegebenermaßen irreführend.
Hab auch ein 64Bit Prozi und nur 32bit laufen...
Und, welchen Wert hat die Variable? x86.