我正在设置一个可移植的开发环境。我正试图从批处理文件中获得我的闪存驱动器插入的当前系统的位(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-bit
或64-bit
。
你可以这样一段代码(注册表):
Set RegQry=HKLMHardwareDescriptionSystemCentralProcessor
REG.exe Query %RegQry% 2>NUL | find /I /N "x86">NUL
If [%ERRORLEVEL%] == [0] (
echo X86
) ELSE (
echo AMD64
)