我可以让批处理脚本相应地运行 32 位或 64 位程序吗?

我可以让批处理脚本相应地运行 32 位或 64 位程序吗?

我想制作一个批处理或命令脚本,它可以根据本地机器处理器架构为 32 位和 64 位程序找到合适的程序。

我想尝试的一个程序是压缩包。我想将 64 位版本放在名为“x64”的文件夹中,将 32 位版本放在标有“x86”的文件夹中,并且脚本位于这些文件夹旁边。

我注意到一些程序,例如作弊引擎,有 32 位和 64 位版本包含一个可以执行此操作的可执行文件。

目前我唯一的线索是%process_architecture%变量。这是我使用以下脚本编写的@dbenham 的原始脚本:

echo %processor_architecture%%processor_architew6432% | findstr 64 >nul && set "prog=x64\WinRAR x64.exe" || set "prog=x86\WinRAR x86.exe"

答案1

如何才能找到适合处理器架构的合适程序?

这是我使用的脚本:

echo %processor_architecture%%processor_architew6432% | findstr 64 >nul && set "prog=x64\WinRAR x64.exe" || set "prog=x86\WinRAR x86.exe"

笔记:

  • OP 使用的上述代码取自此评论经过德本汉姆

  • %processor_architew6432%在 64 位系统上通常是未定义的(例外情况是 32 位进程由 64 位进程创建)。请参阅WOW64 实现细节了解更多信息。

我通常用它wmic OS get OSArchitecture来获取操作系统位数。

下面的批处理文件可以帮助您入门:

@echo off
setlocal enabledelayedexpansion
for /f "usebackq skip=1 tokens=*" %%i in (`wmic OS get OSArchitecture ^| findstr /r /v "^$"`) do (
  set "_bits=%%i"
  rem remove spaces
  set "_bits=!_bits: =!"
  )
if "%_bits%" EQU "64bits" (
  rem 64bit OS
  set "prog=x64\WinRAR x64.exe"
  ) else (
  rem 32bit OS
  set "prog=x86\WinRAR x86.exe"
  )
rem do something with %prog%
call %prog%
endlocal

进一步阅读

答案2

以下是我找出答案的方法:

if exist %windir%\syswow64 ( set ARCH=x64 ) else ( set ARCH=x86 )

简单,每次都有效

相关内容