Wie kann ich mithilfe eines Befehls feststellen, ob Windows 32-Bit oder 64-Bit ist? [Duplikat]


79

Mögliche Duplikate:
Wie , wenn ein Computer sagen , hat einen 64-Bit - CPU oder O
Windows Server Detect Version 32/64-Bit in CLI -
OS - Version: 32-Bit- oder 64-Bit?

Wie stelle ich über die Befehlszeile fest, ob mein Windows-System 32-Bit oder 64-Bit ist?

Ich möchte die Bitanzahl des Betriebssystems kennen, nicht die Hardware.

Diese Frage gilt ausschließlich für die Befehlszeile . Ich möchte keine GUI-Lösungen.


1
Hmm, es ist traurig, dass systeminfodas nicht aufgeführt ist.
Tamara Wijsman

@MaQleod - Ich persönlich würde argumentieren, dass die Fragen keine exakten Duplikate sind, nur weil Ihre Antwort zu beiden passt, da dies ein viel spezifischeres Szenario ist. Ich weiß nicht, ob Ihre Antwort ganz auf die Befehlszeile passt, da sie ein zusätzliches Hilfsprogramm benötigt. Wenn ich es wäre, würde ich sie hier als Antwort posten.
Shinrai

@ MaQleod Ich persönlich würde es nicht als Duplikat bezeichnen, da es nach einer speziellen Lösung nur für die Befehlszeile verlangt. Die von Ihnen verknüpfte Frage hat eine akzeptierte Antwort für eine GUI-Lösung.
Ben Richards

1
Vielen Dank für die Bearbeitung + Antworten. Ich habe die Antwort gewählt, die meiner Situation am besten entspricht.
Negative

Am Ende habe ich herausgefunden, was genau ein Duplikat davon ist. (Verknüpfter Beitrag verweist speziell nur auf die Befehlszeile und bietet sogar meine genaue Lösung.)
Shinrai

Antworten:


123

Geben Sie an einer Eingabeaufforderung mit erhöhten Rechten Folgendes ein wmic os get osarchitecture. Die Ausgabe ist ziemlich offensichtlich, ich denke, es wird entweder "32-Bit" oder "64-Bit" zurückgegeben.


Das klingt wie die Lösung, die ich verwenden würde ... Jetzt wo ich davon weiß.
James T Snell

2
Oder um dasselbe in Powershell zu tun, wenn Sie auf einem W7-Computer oder einem anderen Windows-Betriebssystem arbeiten, auf dem Sie PS: (gwmi win32_OperatingSystem) .OSArchitecture
EBGreen

2
Funktioniert hier nicht unter Windows XP. Rückgabefehler: Ungültige Abfrage.
user606723

1
Vorsichtsmaßnahme: Muss ein Administrator sein, um WMIC auszuführen.
Durchbruch

@ user606723 - Ich habe keine XP-Installation zum Testen, aber ich glaube nicht, dass sich die WMI-Hooks so stark geändert haben. OP hat kein Betriebssystem angegeben, um fair zu sein, aber ich muss das selbst testen.
Shinrai

56

Das Systeminfo-Konsolenprogramm zeigt dies an. Sie müssen nach der Zeile "Systemtyp:" suchen. Auf 32-Bit-Systemen wird "x86-basierter PC" angezeigt. Auf 64-Bit-Systemen wird "x64-basierter PC" angezeigt.

Für eine schnellere Methode können Sie auch einfach die Umgebungsvariable PROCESSOR_ARCHITECTURE überprüfen. 64-Bit-Systeme sagen AMD64 und 32-Bit-Systeme sollten "x86" sagen. Um dies zu überprüfen, können Sie es einfach ausgeben:

echo %PROCESSOR_ARCHITECTURE%

David Wang von MSDN Blogs erweitert dieses HOWTO: Detect Process Bitness


Zeigt dies nicht den PROCESSOR-Typ an, nicht den installierten OS-Typ?
Shinrai

Ich glaube nicht, da der 32-Bit-Modus und der 64-Bit-Modus unterschiedliche Modi sind, in denen sich der Prozessor befinden könnte. Ein Prozessor könnte sich im 32-Bit-Modus befinden, und ich glaube nicht, dass das Betriebssystem von Natur aus weiß, ob dies möglich ist Übergang in den 64-Bit-Modus. Es ist jedoch ein guter Punkt, es ist etwas, das getestet werden müsste. Da ich weiß, dass mein Bruder eine 32-Bit-Win 7-Installation auf einem 64-Bit-fähigen Prozessor hat, werde ich ihn bitten, nach mir zu suchen.
Ben Richards

Ja, ich bin mir nicht sicher (daher die vorläufige Antwort) und habe leider nichts zur Hand, um mich selbst zu überprüfen. Ich dachte, dies sei nur eine Zeichenfolge, die ein bestimmter Prozessor zurückgemeldet hat, unabhängig davon, wie er funktioniert. Es wäre hilfreich, dies sicher zu wissen.
Shinrai

4
Wenn Sie ein 32-Bit-Betriebssystem auf einem 64-Bit-System ausführen, ist% PROCESSOR_ARCHITECTURE% weiterhin "x86". In den meisten Fällen kann ein 64-Bit-Betriebssystem 32-Bit-Programme ausführen, dies funktioniert jedoch nicht umgekehrt.
Bobbymcr

2
up vote as echo% PROCESSOR_ARCHITECTURE% funktioniert auch in der SQL Server-Befehlsshell. Wobei wmic os get osarchitecture manchmal nicht in der SQL Server-Befehlsshell
funktioniert

8

Sie können überprüfen, ob die %PROGRAMFILES(x86)%Umgebungsvariable deklariert ist. Auf 32-Bit-Systemen wird es nicht definiert (nur %PROGRAMFILES%). Dies ist auch sicherer, als nur zu überprüfen, ob das x86-Verzeichnis (Program Files) vorhanden ist, da es verschoben (oder sogar gelöscht) werden kann.


Besser umgehen als nach dem Ordner zu suchen, ja. (Ich verwende keine Problemumgehung, aber wenn Sie dazu gehen, ist dies derjenige, den Sie verwenden müssen.)
Shinrai

Sehr guter Fang ... Ich habe einen Stapel, der nach dem Ordner sucht, aber das wäre definitiv eleganter.
WernerCD

1
Sie können auch die Variablen %PROGRAMFILES(x86)%und vergleichen %PROGRAMFILES%, um festzustellen, ob der Befehl im 32-Bit- oder 64-Bit-Modus gestartet wurde. (Da in 64-Bit-Fenstern immer noch ein 32-Bit-Cmd ausgeführt werden kann.) Beispiel: IF %PROGRAMFILES(x86)%== %PROGRAMFILES%> 32-Bit-Cmd (das in 64-Bit-Fenstern ausgeführt wird .....) IF %PROGRAMFILES(x86)%<> %PROGRAMFILES%=> 64-Bit- Cmd.
Sam Hasler

8

Ich habe eine einfache Befehlszeilenanwendung geschrieben, die Ihnen sagt, ob Ihr Prozessor und Ihr Betriebssystem entweder 64-Bit oder 32-Bit sind.

Auslesebeispiel:

C:\bitchecker
The CPU is 64-bit and the OS is 32-bit

Pro Anfrage ist hier die Quelle, die mit der CLI-Option kompiliert und in AutoIt geschrieben wurde.

If @CPUARCH = "x86" Then
    $CPUARCH = "32-bit"
Else
    $CPUARCH = "64-bit"
EndIf

If @OSARCH = "x86" Then
    $OSARCH = "32-bit"
Else
    $OSARCH = "64-bit"
EndIf

ConsoleWrite("The CPU is " & $CPUARCH & " and the OS is " & $OSARCH)

Und hier ist ein Beispiel, wenn Sie Schalter für CPU (-c) und OS (-o) möchten:

Dim $CPUARCH, $OSARCH

If @CPUARCH = "x86" Then
    $CPUARCH = "32-bit"
Else
    $CPUARCH = "64-bit"
EndIf

If @OSARCH = "x86" Then
    $OSARCH = "32-bit"
Else
    $OSARCH = "64-bit"
EndIf

If $CmdLine[0] = 0 Then
    ConsoleWrite("The CPU is " & $CPUARCH & " and the OS is " & $OSARCH)
Else
    Select
        Case $CmdLine[1] = "-c"
            ConsoleWrite($CPUARCH)
        Case $CmdLine[1] = "-o"
            ConsoleWrite($OSARCH)
        Case Else
            ConsoleWrite("The CPU is " & $CPUARCH & " and the OS is " & $OSARCH)
    EndSelect
EndIf

1
Ich wäre nett, wenn die Datei mit Quelle kommen würde. Es ist ziemlich nervig, eine kleine Exe herunterzuladen, auf mediafire zu veröffentlichen und sie auszuführen.
Artifex

1
@artifex, Quelle hinzugefügt.
MaQleod

es könnte falsch sein U_U Jocking :)
Pitto

Es wäre schön zu wissen, welche API autoit intern verwendet.
user606723

3

Was ist, wenn Sie nur die Anwesenheit von überprüfen

% SYSTEMROOT% \ Programme (x86)

oder wie auch immer es heißt?


Keine super Lösung, aber vielleicht schnell und schmutzig für Ihr spezielles Problem?
James T Snell

Du hast mich für diese Lösung geschlagen, +1. Eine Kurzform könnte sein dir \Program *.
Tamara Wijsman
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.