我想编写一个批处理文件,其中的一些命令针对Program Files
文件夹中的项目,该文件自然地与 Windows XP 到 Windows 7 x64 和 Server 2008 R2 交叉兼容。但是,我在 64 位系统中需要的文件夹名称是Program Files (x86)
。
是否有一个批处理命令可以让我检测系统架构,并编写一个 IF 语句来使用适当的文件夹?或者,是否有一个通用的环境变量可以将我指向正确的文件夹?或者,我是否必须设置部分脚本来查找 x86 文件夹并使用它(如果存在),如果不存在则仅使用其他文件夹?
答案1
我不记得我在哪儿找到的这个,但你可以随意看看。我修改了它以检查 32 位和 64 位 Windows 7。它应该是相当不言自明的。
@echo off
ver | find "2003" > nul
if %ERRORLEVEL% == 0 goto ver_2003
ver | find "XP" > nul
if %ERRORLEVEL% == 0 goto ver_xp
ver | find "2000" > nul
if %ERRORLEVEL% == 0 goto ver_2000
ver | find "NT" > nul
if %ERRORLEVEL% == 0 goto ver_nt
if not exist %SystemRoot%\system32\systeminfo.exe goto warnthenexit
systeminfo | find "OS Name" > %TEMP%\osname.txt
FOR /F "usebackq delims=: tokens=2" %%i IN (%TEMP%\osname.txt) DO set vers=%%i
echo %vers% | find "Windows 7" > nul
if %ERRORLEVEL% == 0 goto ver_7
echo %vers% | find "Windows Server 2008" > nul
if %ERRORLEVEL% == 0 goto ver_2008
echo %vers% | find "Windows Vista" > nul
if %ERRORLEVEL% == 0 goto ver_vista
goto warnthenexit
:ver_7
::Check if 32 or 64 bit
Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0
REG.exe Query %RegQry% > checkOS.txt
Find /i "x86" < CheckOS.txt > StringCheck.txt
If %ERRORLEVEL% == 0 (
:Run Windows 7 32 bit specific commands here.
Echo "This is 32 Bit Windows 7"
) ELSE (
:Run Windows 7 64 bit specific commands here.
Echo "This is 64 Bit Windows 7"
)
goto exit
:ver_2008
:Run Windows Server 2008 specific commands here.
echo Windows Server 2008
goto exit
:ver_vista
:Run Windows Vista specific commands here.
echo Windows Vista
goto exit
:ver_2003
:Run Windows Server 2003 specific commands here.
echo Windows Server 2003
goto exit
:ver_xp
:Run Windows XP specific commands here.
echo Windows XP
goto exit
:ver_2000
:Run Windows 2000 specific commands here.
echo Windows 2000
goto exit
:ver_nt
:Run Windows NT specific commands here.
echo Windows NT
goto exit
:warnthenexit
echo Machine undetermined.
:exit
答案2
您只需检查 ProgramFiles(x86) 是否为空即可。只要没有用户或程序手动设置它即可。
@ECHO OFF
IF "%ProgramFiles(x86)%"=="" GOTO 64 ELSE goto 86
:64
ECHO %ProgramFiles(x86)%
GOTO Quit
:86
ECHO %ProgramFiles%
GOTO Quit
:Quit
PAUSE
或者,您可以检查变量 PROCESSOR_ARCHITECTURE - 如果是 32 位系统,则应为“x86”,如果是 x86-64,则应为“AMD64”,如果是 Itanium CPU,则应为“IA64”。不过,我还没有测试过 Itanium CPU。而且我不确定在 x86-64 机器上安装 32 位 Windows 系统时这些会显示什么。
这些已在 Windows 7 上进行了检查/测试,应该可以在 Vista 上运行。不过,Windows XP 64 位一直不太稳定,所以可能无法在 Vista 上运行。