批处理文件在闪存驱动器-如何检查操作系统架构



我正在设置一个可移植的开发环境。我正试图从批处理文件中获得我的闪存驱动器插入的当前系统的位(32或64),因此我可以使用正确的IDE版本。

这篇文章是一个开始:http://support.microsoft.com/kb/556009,但它使用一个相对地址,当然我的闪存驱动器没有操作系统,所以代码每次默认为i586。

我需要做这个的LOC是什么?

对于Tobias Schlegel的解决方案有一个警告:PROCESSOR_ARCHITECTURE环境变量只返回当前进程的位。在64位机器上,由于WoW64仿真,PROCESSOR_ARCHITECTURE在32位进程中仍然是"x86"。

为了解决这个问题,Microsoft添加了一个新的环境变量PROCESSOR_ARCHITEW6432,它只在WoW64下运行的进程中定义。

因此,正确的代码是:
if "%PROCESSOR_ARCHITECTURE%" == "x86" if "%PROCESSOR_ARCHITEW6432%" == "" goto Arch32
goto Arch64
:Arch32
echo System architecture is 32-bit!
goto:eof
:Arch64
echo System architecture is 64-bit!
goto:eof

这个区别很重要,因为如果您在64位机器上从32位进程启动cmd.exe,那么cmd.exe将在WoW64下运行,因此可接受的解决方案将是不正确的。

检查一下我64位机器上的PROCESSOR_ARCHITECTURE环境变量,它是"AMD64",我猜在32位机器上它是"x86"。

wmic OS get OSArchitecture

应该返回32-bit64-bit

你可以这样一段代码(注册表):

Set RegQry=HKLMHardwareDescriptionSystemCentralProcessor
REG.exe Query %RegQry% 2>NUL | find /I /N "x86">NUL
If [%ERRORLEVEL%] == [0] (
    echo X86
) ELSE (
    echo AMD64
)

最新更新