批处理文件检查64位或32位操作系统

5Yr*_*DBA 52 windows command-line

我可以检查当前机器是否在批处理文件中运行64位操作系统或32位 操作系统

编辑:

在网上找到这个,现在对我来说已经足够了:

小智 70

这是根据Microsoft的知识库参考(http://support.microsoft.com/kb/556009)执行检查的正确方法,我已将其重新编辑为一行代码.

它不依赖于任何环境变量或文件夹名称,而是直接在注册表中进行检查.

如下面的完整批处理文件所示,它将设置一个等于32BIT64BIT的环境变量OS,您可以根据需要使用它.

@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
Run Code Online (Sandbox Code Playgroud)

  • 此外,您可能不希望将OS用作环境变量,因为它已由Windows设置.我的机器上有'OS = Windows_NT' (6认同)
  • 此信息先前在[此答案](http://stackoverflow.com/a/19804271)中提供,但我更喜欢您的实现,因为它不使用中间文件来保存结果. (2认同)
  • 你也犯了一个错误 - 如果应该是`find/i"x86"`,就没有"x32"这样的东西了) (2认同)
  • 将 **`setlocal`** 放在 `@echo off` 行之后 - 这将确保环境的生命周期将随着批处理的终止而结束,因此使用 OS 变量应该不会造成伤害。 (2认同)

小智 38

我使用以下任一方法:

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

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

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

:END
Run Code Online (Sandbox Code Playgroud)

或者我设置bit变量,我稍后在我的脚本中使用该变量来运行正确的设置.

:CheckOS
IF EXIST "%PROGRAMFILES(X86)%" (set bit=x64) ELSE (set bit=x86)
Run Code Online (Sandbox Code Playgroud)

要么...

:CheckOS
IF "%PROCESSOR_ARCHITECTURE%"=="x86" (set bit=x86) else (set bit=x64)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 谁发明了批处理if/else语句......我从来没有见过这样一个可怕的解释器. (6认同)
  • 你对'%PROCESSOR_ARCHITECTURE%`的测试不是错误的吗?我在64位上获得了"AMD64".如果`%PROCESSOR_ARCHITECTURE%`总是有效,那么它比检查任何有缺陷的软件无论CPU可以创建的目录更好的解决方案. (3认同)
  • 发现了一个错误 - 必须在`IF"%PROCESSOR_ARCHITECTURE%"=="x86"(设置位= x64)`中交换正负分支. (3认同)

Thi*_*ryB 24

如果你只做这些,似乎工作:

echo "%PROCESSOR_ARCHITECTURE%"
Run Code Online (Sandbox Code Playgroud)

我发现这些脚本将根据OS体系结构(x64或x86)执行特定的操作:

@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
Run Code Online (Sandbox Code Playgroud)

试着找一个没有GOTO的方法请...

对于使用Unix系统的人来说,uname -m可以做到这一点.

  • @ 5YrsLaterDBA:如果您有特定要求,则需要将它们放入您的问题中.您对实际提出的问题有两个正确的答案.你应该接受一个并且同时投票. (2认同)
  • 请注意:仅测试“PROCESSOR_ARCHITECTURE”来找出操作系统位数是不够的。上面的示例仅测试脚本“cmd.exe”进程位数本身。要测试问题中所述的操作系统位数,您还需要检查“PROCESSOR_ARCHITEW6432”变量是否存在,因为 64 位操作系统上可能存在 32 位进程。 (2认同)

Mah*_*esh 6

*** 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 ***
Run Code Online (Sandbox Code Playgroud)

参考http://support.microsoft.com/kb/556009


S_R*_*S_R 6

如果您以管理员身份运行脚本,则该脚本可以使用 wmic 命令。

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
Run Code Online (Sandbox Code Playgroud)


Ste*_*e-o 5

PROCESSOR_ARCHITECTURE=x86
Run Code Online (Sandbox Code Playgroud)

将出现在 Win32 上,并且

PROCESSOR_ARCHITECTURE=AMD64
Run Code Online (Sandbox Code Playgroud)

将出现在 Win64 上。

如果您反常地运行 32 位cmd.exe进程,那么 Windows 会提供两个环境变量:

PROCESSOR_ARCHITECTURE=x86
PROCESSOR_ARCHITEW6432=AMD64
Run Code Online (Sandbox Code Playgroud)

  • 这只会检测您正在使用的命令外壳的位数,而不是操作系统本身的位数。在 64 位 Windows 上有两个版本的 `cmd.exe`,一个是 64 位的,一个是 32 位的(你通常可以在这里找到它:`C:\Windows\SysWOW64\cmd.exe`)。 (3认同)

pan*_*ako 5

'ProgramFiles(x86)' 是仅在 Windows 64 位机器上由 cmd.exe(32 位和 64 位版本)自动定义的环境变量,所以试试这个:

@ECHO OFF

echo Check operating system ...
if defined PROGRAMFILES(X86) (
    echo 64-bit sytem detected
) else (
    echo 32-bit sytem detected
)
pause
Run Code Online (Sandbox Code Playgroud)


Emi*_*uez 5

在命令提示符下运行以下命令:

开始 -> 运行 -> 键入cmd并在结果黑框中输入以下命令:

wmic os get osarchitecture
Run Code Online (Sandbox Code Playgroud)

  • 我认为最初的问题是期待一些可以在批处理文件中工作的东西,例如`wmic os get osarchitecture | 查找“64”&gt; NUL &amp;&amp; 设置 NumBits=64 || set NumBits=32` 否则,我认为这是最简洁的答案...只要 `wmic` 始终存在于路径上...... (2认同)