Detectar Windows Server versión 32/64-bit en CLI

Respuestas:

12

Una forma un poco más rápida sería verificar la existencia del directorio% ProgramFiles (x86)%. Si existe, entonces está ejecutando 64 bits, si no existe, entonces está ejecutando 32 bits.

One-liner rápido:

if exist "%ProgramFiles(x86)%" echo 64-bit

Eso dará salida 64-bitsi el directorio existe. Sin embargo, eso fallaría si no existiera como una variable pero existiera como un directorio (como% ProgramFiles (x86)%).

También puede usar la herramienta de búsqueda para tener una forma más precisa de determinar la bitness.

set | find "ProgramFiles(x86)"

o usando el systeminfocomando previamente

systeminfo | find /I "System type"

(incluido el /Ipara trabajar en XP / 2003/2008 / etc)

Joshua
fuente
debería ser systeminfo | find "System type" Capitol T no devuelve nada.
Nathan DeWitt el
Sí, lo perdí por completo. Gracias nathan! Por supuesto, también puede usar el modificador / I para que no distinga entre mayúsculas y minúsculas.
Joshua
Server 2008, en realidad es una 'T' mayúscula. De cualquier manera. Gracias por la respuesta, perfecto.
romantico
¡Multa! ¡Seguí adelante e incluí el / I cambio a systeminfo para que lo encuentre ya sea mayúscula o no! :)
Joshua
22

Qué tal si:

echo %PROCESSOR_ARCHITECTURE%

Esto devolverá x86 en sistemas de 32 bits y AMD64 (o IA64 ) en sistemas de 64 bits.

Garfio
fuente
2
¿Cómo es que esto tuvo 0 votos? oO (+1)
Apache
1
Esta es una solución mucho mejor que verificar la existencia del Program Files (x86)directorio como lo publicó otra persona. Usted podría también comprobar la existencia de la %PROGRAMFILES(X86)%variable de entorno (si no existe, entonces estás en una máquina x86).
Avance el
3
> ¿Cómo es que esto tuvo 0 votos? Tal vez porque es no fiable .
Synetech
2
¡ESTA RESPUESTA TIENE PROBLEMAS! - stackoverflow.com/questions/1738985/…
T.Todua
9
systeminfo 

Enumerará bastante, alrededor de 10 campos hay uno llamado Tipo de sistema. Esto te dirá si es x86 o x64

MDMarra
fuente
8
systeminfo | find /I "System type"

Esto depende del entorno local y es lento .

echo %PROCESSOR_ARCHITECTURE%

Tenga en cuenta que es x86 en 32 bits cmd.exe.

Forma correcta:

set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( 
    if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
) 
airmax
fuente
Completamente de acuerdo en sus pensamientos sobre el uso de 'systeminfo'. Gracias por su sugerencia, lo he usado en uno de mis scripts
abstrask el
La mejor respuesta! con validador adicionalPROCESSOR_ARCHITEW6432
T.Todua
5

Existen numerosas formas de verificar la arquitectura del procesador en Windows:

  • La forma más rápida, fácil y compatible de verificar la arquitectura del procesador en Windows 2000 y versiones posteriores es examinar la PROCESSOR_ARCHITECTURE variable de entorno :

    echo %PROCESSOR_ARCHITECTURE%

  • Sin embargo, esto puede dar resultados diferentes, dependiendo de la forma en que se abre el símbolo del sistema. Para evitar obtener "resultados inesperados" debido a WoW64 , puede leerlo directamente desde el registro (Microsoft realizó no menos de dos errores tipográficos en la clave ):

    reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE

  • Microsoft también sugiere leer el almacén de información de hardware del registro:

    reg query "HKLM\Hardware\Description\System\CentralProcessor\0" /v Identifier

  • También puede verificar la existencia de la versión x86 del Program Filesdirectorio (o la variable de entorno que lo señala), ya que solo existiría en un sistema de 64 bits. A diferencia de la PROCESSOR_ARCHITECTUREvariable, esto no depende de la forma en que se ejecuta el símbolo del sistema ya que el directorio existe (o no) independientemente de cómo se abra el indicador:

    • ::via env-var
      if not defined ProgramFiles(x86) echo 32-bit

    • ::via file-system
      if not exist "%systemdrive%\Program Files (x86)" echo 32-bit

Estos métodos se pueden combinar en un único archivo por lotes (por ejemplo, cpuinfo.bat) y proporciona una manera agradable y rápida de verificar el sistema desde un símbolo del sistema estándar de Windows NT sin necesidad de recurrir a la ejecución de otros programas o marcos.

Esto se probó en sistemas de 32 bits e Intel de 64 bits (pruebe en AMD64), dando resultados correctos en <1 segundo:

@echo off

echo PROCESSOR_ARCHITECTURE var:
echo %PROCESSOR_ARCHITECTURE% | find /i "x86" > nul
if %errorlevel%==0 (
    echo   32-bit
) else (
    echo   64-bit
)
echo.

echo PROCESSOR_ARCHITECTURE reg:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE | find /i "x86" > nul
if %errorlevel%==0 (
    echo   32-bit
) else (
    echo   64-bit
)
echo.

echo CentralProcessor reg:
reg query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > nul
if %errorlevel%==0 (
    echo   32-bit
) else (
    echo   64-bit
)
echo.

echo ProgramFiles(x86) var:
if not defined ProgramFiles(x86) (
    echo   32-bit
) else (
    echo   64-bit
)
echo.

echo ProgramFiles(x86) dir:
if not exist "%systemdrive%\Program Files (x86)" (
    echo   32-bit
) else (
    echo   64-bit
)
echo.
Synetech
fuente
3

SOLUCIÓN GENÉRICA

Realmente tuve que profundizar en esto y echar un vistazo real en WMI.

La mejor opción en mi opinión es simplemente usar esta cadena de PowerShell

(Get-WmiObject win32_ComputerSystem -ComputerName $ComputerName).SystemType

Esto incluso funciona con viejos Windows 2003 y XP

La respuesta será una de

  • PC basada en X86
  • PC basada en x64

PC basada en x64

O si está volviendo a algunas herramientas cmd anticuadas

wmic computersystem get systemtype
Dennis
fuente
2

Aunque esta no es la respuesta ideal, y systeminfo.exedebería ser su método preferido para determinar el tipo de sistema, es decir, 32 bits o 64 bits, esta solución se ejecuta un poco más rápido si no desea esperar a systeminfo.exeque termine su trabajo.

El comando:

reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | find "BuildLabEx"

Con los cambios correctos en la consulta del registro y la cadena de búsqueda, también puede verificar las versiones del sistema operativo desde Windows 95. systeminfo.exeEs más exacto y la forma correcta de consultar, reg.exe queryes más rápido y más compatible con versiones anteriores.

Justin
fuente
Gracias Tom por las ediciones, eliminó información importante de la respuesta y luego procedió a introducir un error.
Justin
1
En lugar de canalizar la salida a través del comando "encontrar" con errores de Microsoft, puede hacer que REG.EXE extraiga el valor exacto con el reg query "HKLM\[..as before..]\Version" /v BuildLabEx
modificador
0

Mejor SOLUCIÓN:

Método 1:
(Validación en dos pasos con PROCESSOR_ARCHITECTUREy PROCESSOR_ARCHITEW6432)

set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( 
    if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
) 


if %Arch% == "x64"  (
    msg * "yessss"
) else  (
    msg * "noooo"
)

Método 2:

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

if %OS%==32BIT echo "YESSS"
if %OS%==64BIT echo "NOOO"

fuente: /superuser//a/293143/249349

T.Todua
fuente
-1

Usando la interfaz WMI, bajo el símbolo del sistema. Abra el símbolo del sistema como administrador, escriba wmic OS get OSArchitecturey presioneEnter

Terry
fuente