在32位Windows操作系统中使用%PROGRAMFILES(x86)%

34

当我在32位Windows操作系统上使用环境变量%PROGRAMFILES(x86)%时(例如,旧版本的Windows如Windows XP、Vista),会发生什么?

我希望它将简单地解析为:C:/Program Files。这会发生吗?


%PROGRAMFILES% 将解析为 64 位程序的文件夹,但是您可以创建自己的 %PROGRAMFILES (x86)% 变量。 - Gary
4个回答

54
根据此文,环境变量%PROGRAMFILES(x86)%仅适用于64位系统。
然而,如果您在64位系统上使用%PROGRAMFILES%,则所得到的结果取决于请求该环境变量的进程是32位还是64位。
因此,在64位系统上的64位进程中,您会得到C:\Program Files;在64位系统上的32位进程中,您将得到C:\Program Files (x86);在32位系统上的32位进程中,您将得到C:\Program Files
如果这没有帮助,请评论或编辑您原来的问题,以使其更具体。就目前而言,对您的问题的答案是“否”。

1
谢谢,它按照你所说的方式工作。但是需要提醒大家的是,维基百科的条目有点误导。 - James_UK_DEV
5
你希望使用一个批处理文件来查找特定的32位程序,而该文件需要在32位和64位计算机之间共享。为了实现这一点,你需要一个变量,该变量在32位系统上评估为c:\program files,在64位系统上评估为c:\program files (x86)。即%ProgramW6432%。 - OJW
1
那么,问题是:如何从在64位系统上运行的32位软件中访问程序文件的64位路径? - Saeed Neamati
1
@SaeedNeamati 您可以像OJW上面的笔记一样使用%ProgramW6432%。更详细的说明可以在MSDN中找到。 - Roger Rowland
1
如果%ProgramW6432%给出了64位路径,那么@OJW提出的“您想定位特定的32位程序...”这个问题的答案是什么? - Jools

3

Keith Hill这里回答了这个问题,总结如下:

32位机器上未定义 ${env:ProgramFiles(x86)}

如果您始终想将数据放入/从x86目录获取, 那么您可以使用此代码确定文件路径:

$file = "\file"
if ("${Env:ProgramFiles(x86)}")
{
    $fullPath = "${Env:ProgramFiles(x86)}\$file"
}
else
{
    $fullPath = "${Env:ProgramFiles}\$file"
}

2

由于在32位Windows 7上未定义%ProgramFiles(x86)%,因此我想出了以下解决方法:

SET MyPath="%ProgramFiles(x86)%\MyFolder\MyApplication.exe"
rem workaround for Windows7 32 bit:
IF NOT DEFINED ProgramFiles(x86) SET MyPath="%PROGRAMFILES%\MyFolder\MyApplication.exe"

使用案例: 我想从批处理文件中调用一个已经安装的应用程序:

  • 在Windows 7 32位操作系统上,该应用程序已安装在C:\Program Files\MyFolder\MyApplication.exe
  • 在Windows 7 64位操作系统上,该应用程序已安装在C:\Program Files(x86)\MyFolder\MyApplication.exe

这样一来,%MyPath% 总是指向正确的路径。


-15

如果您在32位计算机/笔记本电脑上使用%programfiles%,它将打开C:\Program Files

如果您在64位计算机/笔记本电脑上使用%programfiles%,它将打开C:\Program Files

如果您在32位计算机/笔记本电脑上安装了64位程序,则会在“C”驱动器中的一个名为Program Files (x64)的新文件夹中安装该程序。在这种情况下,您必须使用%programfiles(x64)

如果您在64位计算机/笔记本电脑上安装了32位程序,则会在“C”驱动器中的一个名为Program Files (x86)的新文件夹中安装该程序。在这种情况下,您必须使用%programfiles(x86)


2
我猜人们下投票的部分原因是因为短语如果你在32位电脑/笔记本上安装了64位程序,这当然是如此显而易见的不可能性,以至于它是毫无意义的。 - underscore_d
1
@underscore_d:我相信当在64位ARM CPU上运行时,你可以在32位操作系统上运行/安装64位代码。 - IInspectable
@IInspectable 看来你是对的。我很高兴我没有投反对票!然而,我找不到太多证据证明 Program Files (x64)%programfiles(x64)% 是存在的...难道 Windows 的 ARM 用户/讨论就这么少吗?请注意那个尾随的 %;但是,%programfiles(x86) 将只是字面上的 echo;我们需要 %programfiles(x86)% 来获取目录路径。 - underscore_d
@underscore_d:我从未见过64位程序文件目录,也没有在实际中看到相应的环境变量。Visual Studio带有用于桌面的ARM64构建工具,因此必须有针对ARM的Windows 10桌面版本。不过,我怀疑程序文件目录是否有“x64”后缀,虽然我不确定,但兼容性一直是微软误命名事物的一个强有力的论据。 - IInspectable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接