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

5YrsLaterDBA 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

  • 此外,您可能不希望将OS用作环境变量,因为它已由Windows设置.我的机器上有'OS = Windows_NT' (6认同)
  • 此信息先前在[此答案](http://stackoverflow.com/a/19804271)中提供,但我更喜欢您的实现,因为它不使用中间文件来保存结果. (2认同)
  • 你也犯了一个错误 - 如果应该是`find/i"x86"`,就没有"x32"这样的东西了) (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

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

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

要么...

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

希望这可以帮助.

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

ThierryB.. 24

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

echo "%PROCESSOR_ARCHITECTURE%"

我发现这些脚本将根据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

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

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

  • @ 5YrsLaterDBA:如果您有特定要求,则需要将它们放入您的问题中.您对实际提出的问题有两个正确的答案.你应该接受一个并且同时投票. (2认同)

Mahesh.. 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 ***

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