当我在32位Windows操作系统上使用环境变量%PROGRAMFILES(x86)%
时(例如,旧版本的Windows如Windows XP、Vista),会发生什么?
我希望它将简单地解析为:C:/Program Files
。这会发生吗?
当我在32位Windows操作系统上使用环境变量%PROGRAMFILES(x86)%
时(例如,旧版本的Windows如Windows XP、Vista),会发生什么?
我希望它将简单地解析为:C:/Program Files
。这会发生吗?
%PROGRAMFILES(x86)%
仅适用于64位系统。%PROGRAMFILES%
,则所得到的结果取决于请求该环境变量的进程是32位还是64位。C:\Program Files
;在64位系统上的32位进程中,您将得到C:\Program Files (x86)
;在32位系统上的32位进程中,您将得到C:\Program Files
。Keith Hill 在这里回答了这个问题,总结如下:
32位机器上未定义
${env:ProgramFiles(x86)}
如果您始终想将数据放入/从x86目录获取, 那么您可以使用此代码确定文件路径:
$file = "\file"
if ("${Env:ProgramFiles(x86)}")
{
$fullPath = "${Env:ProgramFiles(x86)}\$file"
}
else
{
$fullPath = "${Env:ProgramFiles}\$file"
}
由于在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"
使用案例: 我想从批处理文件中调用一个已经安装的应用程序:
这样一来,%MyPath%
总是指向正确的路径。
如果您在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)
。
如果你在32位电脑/笔记本上安装了64位程序
,这当然是如此显而易见的不可能性,以至于它是毫无意义的。 - underscore_dProgram Files (x64)
或 %programfiles(x64)%
是存在的...难道 Windows 的 ARM 用户/讨论就这么少吗?请注意那个尾随的 %
;但是,%programfiles(x86)
将只是字面上的 echo
;我们需要 %programfiles(x86)%
来获取目录路径。 - underscore_d
%PROGRAMFILES%
将解析为 64 位程序的文件夹,但是您可以创建自己的 %PROGRAMFILES (x86)% 变量。 - Gary