it-swarm.com.de

batchdatei zum Überprüfen von 64-Bit- oder 32-Bit-Betriebssystemen

Kann ich überprüfen, ob auf der aktuellen Maschine 64bit OS oder 32bitOS in einer Batchdatei ausgeführt wird?

EDIT:

das online gefunden und ist mir jetzt gut genug:

46
5YrsLaterDBA

Dies ist die richtige - Methode, um die von Microsoft überarbeitete Referenz in der Knowledgebase ( http://support.Microsoft.com/kb/556009 ) von Microsoft zu überprüfen in nur eine einzige Codezeile.

Es ist nicht auf Umgebungsvariablen oder Ordnernamen angewiesen und prüft stattdessen direkt in der Registrierung.

Wie in einer vollständigen Batchdatei unten gezeigt, wird eine Umgebungsvariable OS festgelegt, die entweder 32BIT oder 64BIT entspricht und die Sie je nach Wunsch verwenden können.

@echo OFF

reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT

if %OS%==32BIT echo This is a 32bit operating system
if %OS%==64BIT echo This is a 64bit operating system
59
Sam Spade

Ich verwende eine der folgenden Möglichkeiten:

:CheckOS
IF EXIST "%PROGRAMFILES(X86)%" (GOTO 64BIT) ELSE (GOTO 32BIT)

:64BIT
echo 64-bit...
GOTO END

:32BIT
echo 32-bit...
GOTO END

:END

oder ich setze die Variable bit, die ich später in meinem Skript verwende, um das korrekte Setup auszuführen.

:CheckOS
IF EXIST "%PROGRAMFILES(X86)%" (set bit=x64) ELSE (set bit=x86)

oder...

:CheckOS
IF "%PROCESSOR_ARCHITECTURE%"=="x86" (set bit=x86) else (set bit=x64)

Hoffe das hilft.

38
Kerstin Fischer

Scheint zu funktionieren, wenn Sie nur diese tun:

echo "%PROCESSOR_ARCHITECTURE%"

Ich habe diese Skripte gefunden, die abhängig von der Betriebssystemarchitektur (x64 oder x86) bestimmte Dinge tun:

@echo off
echo Detecting OS processor type

if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto 64BIT
echo 32-bit OS
\\savdaldpm01\ProtectionAgents\RA\3.0.7558.0\i386\DPMAgentInstaller_x86 /q
goto END
:64BIT
echo 64-bit OS
\\savdaldpm01\ProtectionAgents\RA\3.0.7558.0\AMD64\DPMAgentInstaller_x64 /q
:END

"C:\Program Files\Microsoft Data Protection Manager\DPM\bin\setdpmserver.exe" -dpmservername sa

Versuchen Sie, einen Weg ohne GOTO zu finden, bitte ...

Für Leute, die mit Unix-Systemen arbeiten, macht uname -m den Trick.

22
ThierryB
*** Start ***

@echo off

Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0

REG.exe Query %RegQry% > checkOS.txt

Find /i "x86" < CheckOS.txt > StringCheck.txt

If %ERRORLEVEL% == 0 (
    Echo "This is 32 Bit Operating system"
) ELSE (
    Echo "This is 64 Bit Operating System"
)

*** End ***

referenz http://support.Microsoft.com/kb/556009

5
Mahesh
PROCESSOR_ARCHITECTURE=x86

Erscheint unter Win32 und

PROCESSOR_ARCHITECTURE=AMD64

erscheint für Win64.

Wenn Sie den 32-Bit-cmd.exe-Prozess pervers ausführen, präsentiert Windows zwei Umgebungsvariablen:

PROCESSOR_ARCHITECTURE=x86
PROCESSOR_ARCHITEW6432=AMD64
4
Steve-o

Führen Sie den folgenden Befehl in der Eingabeaufforderung aus:

Start -> Ausführen -> Geben Sie cmd ein und geben Sie den folgenden Befehl in das resultierende schwarze Feld ein:

wmic os get osarchitecture
4

'ProgramFiles (x86)' ist eine Umgebungsvariable, die von cmd.exe (32-Bit- und 64-Bit-Version) nur auf Windows-64-Bit-Computern definiert wird.

@ECHO OFF

echo Check operating system ...
if defined PROGRAMFILES(X86) (
    echo 64-bit sytem detected
) else (
    echo 32-bit sytem detected
)
pause
4
panako

Hier ist mein persönlicher Favorit, eine logische Bombe :)

::32/64Bit Switch
ECHO %PROCESSOR_ARCHITECTURE%|FINDSTR AMD64>NUL && SET Arch=AMD64 || SET Arch=x86
ECHO %Arch%
PAUSE

Bei den ANDs (&&) und ORs (||) ist dies ein IF THEN ELSE Batch Construct.

2
zzeroo

In meinem Fall funktionierte keine der Antworten (64-Bit-Prozessor, aber 32-Bit-Betriebssystem). Hier ist die Lösung, die für mich funktioniert:

(set | find "ProgramFiles(x86)" > NUL) && (echo "%ProgramFiles(x86)%" | find "x86") > NUL && set bits=64 || set bits=32
1
teh_senaus

Wenn das Skript unter Administrator ausgeführt werden kann, kann es den Befehl wmi verwenden.

FOR /f "tokens=2 delims==" %%f IN ('wmic os get osarchitecture /value ^| find "="') DO SET "OS_Arch=%%f"
IF "%OS_Arch%"=="32-bit" GOTO :32bit
IF "%OS_Arch%"=="64-bit" GOTO :64bit

ECHO OS Architecture %OS_Arch% is not supported!
EXIT 1

:32bit
ECHO "32 bit Operating System"
GOTO :SUCCESS

:64bit
ECHO "64 bit Operating System"
GOTO :SUCCESS

:SUCCESS
EXIT 0
1
S_R

Ich verstehe einige der hier gegebenen Antworten wirklich nicht (tut mir leid). Die am besten bewertete Antwort gibt beispielsweise nicht die Windows-Architektur zurück, sondern die Prozessorarchitektur. Beim Ausführen eines 32-Bit-Windows-Builds auf einer 64-Bit-CPU erhalten Sie das falsche Ergebnis (es handelt sich um eine Abfrage der verwendeten Hardware).

Die sicherste Option besteht darin, den BuildLabEx-Wert von der Registrierung abzufragen.

x86 (Intel) oder x86-64 (AMD) ermitteln

reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion" /v "BuildLabEx" | >nul find /i ".x86fre."   && set "_Arch_=x86" || set "_Arch_=x86-64"

x86 (Intel), x86-64 (AMD) oder Arm ermitteln

set "_Arch_=unknown"
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion" /v "BuildLabEx" | >nul find /i ".x86fre."   && set "_Arch_=x86" 
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion" /v "BuildLabEx" | >nul find /i ".AMD64fre." && set "_Arch_=x86-64" 
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion" /v "BuildLabEx" | >nul find /i ".armfre."   && set "_Arch_=arm" 

Eine alternative Option(zuvor erwähnt)

if defined ProgramFiles(x86) ( set "_Arch_=x86-64" ) else ( set "_Arch_=x86" )

Das Problem bei letzterem ist, wenn Sie Ihre Variablen durcheinander bringen, können Sie diese Methode nicht verwenden. Die Überprüfung der Existenz des Ordners führt ebenfalls zu Problemen, wenn bei einer vorherigen Installation Reste vorhanden sind (oder wenn ein Benutzer den Ordner absichtlich erstellt hat).

1
FifthAxiom

Nach langem Ausprobieren gelang es mir, einige verschiedene Arbeitsbeispiele zu erhalten, aber der Kicker war, als der Batch auf einem 64-Bit-Betriebssystem auf einem 32-Bit-CMD gestartet wurde. Am Ende war dies der einfachste Check, den ich zur Arbeit bekommen konnte, der unter Win2k-Win8 32/64 ..__ arbeitet.

set bit64=n
if /I %Processor_Architecture%==AMD64 set bit64=y
if /I "%PROCESSOR_ARCHITEW6432%"=="AMD64" set bit64=y
1
Michael
set bit=64
IF NOT DEFINED PROGRAMFILES(X86) (
set "PROGRAMFILES(X86)=%PROGRAMFILES%"
set bit=32
)
REM Example 1: REG IMPORT Install%bit%.reg (all compatibility)
REM Example 2: CD %PROGRAMFILES(X86)% (all compatibility)
0

Dies ist ein Einzeiler, der %errorlevel% von 0 für 64-Bit und 1 für Nicht-64-Bit hat. Ich kann nicht dafür bürgen, dass es in allen Windows-Versionen funktioniert, aber es wird eine Methode zur Bestimmung gezeigt. Sie können mehrere findstr-Abfragen hinzufügen, wenn Sie alle Suchmöglichkeiten kennen.

set | findstr /i processo.*64 > nul 2>&1

Grundsätzlich sichern Sie die Umgebungsvariablen und verwenden einen regulären Ausdruck, um nach etwas zu suchen, das irgendwo in der Zeile "processo" + "64" enthält. Die Verrohrung dient nur dazu, die übereinstimmenden Leitungen zu unterdrücken. Wenn ich es auf meinem aktuellen Rig in set | findstr /i processo.*64 > nul 2>&1 änderte, würde dies das Ergebnis sein:

 C:\Windows\System32>set | findstr /i processo.*64
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 158 Stepping 9, GenuineIntel

Dies ist ein One-Liner, um festzustellen, ob Ihr Prozessor ein 64-Bit-AMD ist

set | findstr /i processo.*AMD.*64 > nul 2>&1

Sie können diese als Ausgangspunkt nehmen und für Ihre Anforderungen verfeinern. Am Ende benutzte ich dies über bekannten Umgebungsvariablennamen, da es in verschiedenen Hauptversionen von Windows, mit denen ich arbeitete, zuverlässiger war.

0

Viele DOS-Befehle in den verschiedenen Windows-Versionen sind ähnlich, unterstützen jedoch möglicherweise andere Parameter. Außerdem unterstützen neuere Versionen von Windows möglicherweise neue Befehle oder setzen ältere zurück. Wenn Sie also eine Batchdatei schreiben möchten, die auf verschiedenen Arten von Maschinen ausgeführt werden kann, kann es sich als vorteilhaft erweisen, die Windows-Version zu bestimmen, auf der die Batchdatei ausgeführt wird. Auf diese Weise kann die Batchdatei Befehle ausführen, die für das Betriebssystem geeignet sind.

Die folgende Batchdatei bestimmt, ob auf dem Computer Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, Windows XP, Windows 2000 oder Windows NT ausgeführt wird. Sie kann leicht geändert werden, um bei Bedarf andere Windows-Versionen zu unterstützen oder eine Umgebungsvariable basierend auf der erkannten Windows-Version festzulegen. Beachten Sie, dass diese Stapeldatei für eine korrekte Unterscheidung zwischen neueren Versionen von Windows Server und Consumer-Versionen von Windows mehr kompliziert ist als Stapeldateien, die Sie an anderer Stelle sehen. Ich habe die Gründe unten erklärt.

1) Öffnen Sie ein Notepad-Fenster.

2) Kopieren Sie den folgenden Text in den Editor (möglicherweise möchten Sie auf die gedruckte Version dieses Tipps zugreifen, wenn einige Zeilen umbrochen werden):

@echo off

ver | find "2003" > nul
if %ERRORLEVEL% == 0 goto ver_2003

ver | find "XP" > nul
if %ERRORLEVEL% == 0 goto ver_xp

ver | find "2000" > nul
if %ERRORLEVEL% == 0 goto ver_2000

ver | find "NT" > nul
if %ERRORLEVEL% == 0 goto ver_nt

if not exist %SystemRoot%\system32\systeminfo.exe goto warnthenexit

systeminfo | find "OS Name" > %TEMP%\osname.txt
FOR /F "usebackq delims=: tokens=2" %%i IN (%TEMP%\osname.txt) DO set vers=%%i

echo %vers% | find "Windows 7" > nul
if %ERRORLEVEL% == 0 goto ver_7

echo %vers% | find "Windows Server 2008" > nul
if %ERRORLEVEL% == 0 goto ver_2008

echo %vers% | find "Windows Vista" > nul
if %ERRORLEVEL% == 0 goto ver_Vista

goto warnthenexit

:ver_7
:Run Windows 7 specific commands here.
echo Windows 7
goto exit

:ver_2008
:Run Windows Server 2008 specific commands here.
echo Windows Server 2008
goto exit

:ver_Vista
:Run Windows Vista specific commands here.
echo Windows Vista
goto exit

:ver_2003
:Run Windows Server 2003 specific commands here.
echo Windows Server 2003
goto exit

:ver_xp
:Run Windows XP specific commands here.
echo Windows XP
goto exit

:ver_2000
:Run Windows 2000 specific commands here.
echo Windows 2000
goto exit

:ver_nt
:Run Windows NT specific commands here.
echo Windows NT
goto exit

:warnthenexit
echo Machine undetermined.

:exit

3) Speichern Sie die Datei als% WINDIR%\whichvers.bat

4) Geben Sie nun in der Eingabeaufforderung Folgendes ein:

welche

Dadurch wird angezeigt, welche Windows-Version Sie ausführen.

ANMERKUNGEN:

  1. Der Grund für die Verwendung des Befehls SYSTEMINFO, anstatt sich auf den Befehl VER zu verlassen, liegt darin, dass Windows Server 2008 Versionsnummern mit anderen Windows-Versionen "teilt" (siehe Microsoft). Die Unterscheidung eines Computers von Windows Server 2008 oder Windows Server 2008 R2 ist daher nicht möglich, wenn Windows Vista auf eine "Versionsnummer" von 6.0 angewiesen wird, um Windows Vista oder 6.1 zu erkennen.

  2. Die Erstellung von% TEMP%\osname.txt erfolgt ausschließlich deshalb, weil ich die Ergebnisse von systeminfo | nicht platzieren konnte Finden Sie "OS-Name" direkt in den for/f-Befehl - er mag keine übergebenen Befehle. Möglicherweise finden Sie eine einfachere Möglichkeit, die Informationen von SYSTEMINFO abzurufen. Wenn ja, kommentieren Sie dies bitte.

  3. Die Umgebungsvariable% vers% hat führende Leerzeichen. Ich könnte diese mit einer längeren Batchdatei entfernen, aber in diesem Fall ist dies nicht erforderlich.

  4. Die Batch-Datei erkennt SYSTEMINFO, da davon ausgegangen wird, dass die aktuelle Windows-Version noch älter ist und dieses Dienstprogramm nicht zur Verfügung steht. Unter Windows 7 64-Bit befindet es sich immer noch im Ordner% SystemRoot%\system32. Wenn spätere Versionen von Windows nur noch 64-Bit werden, muss diese Batchdatei möglicherweise aktualisiert werden.

Kehren Sie zur Windows XP - und DOS-Seite zurück.

0
Dalir Bajlany

Ich mache normalerweise folgendes:

:Check_Architecture
if /i "%processor_architecture%"=="x86" (
    IF NOT DEFINED PROCESSOR_ARCHITEW6432 (
        REM Run 32 bit command

    ) ELSE (
        REM Run 64 bit command
    )           
) else (
        REM Run 64 bit command
)
0
Adil Hindistan

Sie können den folgenden Registrierungspfad verwenden, um zu überprüfen, ob auf dem 32-Bit- oder 64-Bit-Betriebssystem des Computers Windows ausgeführt wird:

HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0

Im rechten Fensterbereich werden folgende Registrierungseinträge angezeigt:

Identifier     REG_SZ             x86 Family 6 Model 14 Stepping 12
Platform ID    REG_DWORD          0x00000020(32)

Die obigen x86 und 0x00000020(32) zeigen an, dass die Betriebssystemversion 32-Bit ist.

Hier ist eine schöne prägnante Version: 

set isX64=False && if /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" ( set isX64=True ) else ( if /I "%PROCESSOR_ARCHITEW6432%"=="AMD64" ( set isX64=True ) )

echo %isX64%

Verwenden Sie das Verzeichnis "Program Files (x86)" nicht als Beweismittel: Unartige Software kann dieses Verzeichnis auf einem 32-Bit-Computer leicht erstellen. Verwenden Sie stattdessen die Umgebungsvariablen PROCESSOR_ARCHITECTURE und PROCESSOR_ARCHITEW6432.

0
Rory