有没有办法通过 .BAT 文件普遍寻址 Windows 7/2008 中的默认 Program Files 文件夹?

有没有办法通过 .BAT 文件普遍寻址 Windows 7/2008 中的默认 Program Files 文件夹?

我想编写一个批处理文件,其中的一些命令针对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 上运行。

相关内容