如何在Windows .bat脚本中检查32位程序文件夹的位置

5

我希望编写一个可以在所有版本的Windows上运行的.bat脚本,无论是32位还是64位系统。

在这个脚本中,我想要运行某个file.exe文件。该文件位于32位系统的C:\Program Files\或x64系统的C:\Program Files (x86)\下。我可以这样写:

在64位系统下:"%ProgramFiles(x86)%\file.exe" 在32位系统下:"%ProgramFiles%\file.exe" 但我想让这个脚本具有普适性。有没有一种通用的方法来确定路径呢?

5个回答

6

你可以检查它的存在并存储路径。

@echo off & setLocal enabledelayedexpansion
if exist "C:\Program Files\app1.exe" (
 set PPATH="C:\Program Files\"
) else (
 set PPATH="C:\Program Files(x86)\"
)

start "" %PPATH%app1.exe
start "" %PPATH%app2.exe
start "" %PPATH%app3.exe

这个解决方案容易出错。如果操作系统是法语或德语怎么办?程序文件的文件夹名称在那里是不同的,至少在XP上是这样(不知道Vista)。 - Sgali
1
如果您的操作系统语言不是英语,那么您可以将硬编码的路径替换为分别为%PROGRAMFILES%和%PROGRAMFILES(x86)%。 - Alex K.
使用%ProgramFiles(x86)%或%ProgramFiles%在条件和PPATH中。请查看https://dev59.com/gWkw5IYBdhLWcg3w2-XH - Sgali

5

VBS脚本:

 set wshShell = createObject("WScript.Shell")  
    ''-----------------------------------    
    ''Get 32-bit program files path  
    ''-----------------  
    OsType = wshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE")    
    If OsType = "x86" then  
            '''wscript.echo "Windows 32bit system detected"  
            strProgramFiles = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES%")  
    elseif OsType = "AMD64" then  
            '''wscript.echo "Windows 64bit system detected"  
            strProgramFiles = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES(x86)%")  
    end if  

1
“whereis”是一个Linux命令,可以实现这个功能,但是Windows版本也有(我相信是unxutils)。如果没有它,你就无法获取路径。

1

我认为你应该使用VBScript/JScript文件,而不是"bat"文件。这两种脚本都可以由Windows脚本解释器(wscript.exe/cscript.exe)执行。脚本环境和解释器在所有版本的Windows上都可用,所以不用担心。你可以找到使用VBScript遍历目录结构、检查文件是否存在等方面的代码示例。你可以在大部分情况下使用FileSystemObject Object


1

为了简单起见,您可以始终执行以下操作:

cd %PROGRAMFILES%
cd %PROGRAMFILES(x86)%
Program.exe

这假设您不需要进行任何复杂操作,但如果设置当前目录就足够了,那么这应该可以正常工作。

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