我想制作一个批处理或命令脚本,它可以根据本地机器处理器架构为 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"
笔记:
%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
进一步阅读
- WOW64 实现细节
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 查找字符串- 在文件中搜索字符串。
- 对于/f- 循环命令以执行另一个命令的结果。
- 如果- 有条件地执行命令。
- 西米克- Windows 管理规范命令。
答案2
以下是我找出答案的方法:
if exist %windir%\syswow64 ( set ARCH=x64 ) else ( set ARCH=x86 )
简单,每次都有效