在我的公司,我们使用批处理文件启动Matlab。批处理文件在启动Matlab之前准备环境。
Matlab本身以
开头START MATLAB.EXE
我的系统上安装了几个版本的Matlab。而且这个命令启动了错误的Matlab版本。 START在哪里寻找可执行文件?
答案 0 :(得分:8)
命令 start 查找可执行文件,如命令行解释程序 cmd.exe ,如果没有使用绝对路径,则使用环境变量 PATHEXT中列出的扩展名如果文件扩展名也缺失,则以分号分隔。
当前工作目录。
环境变量 PATH 的所有目录按照路径中的顺序排列。
只需输入命令提示符窗口set path
即可查看 PATH 中的所有目录以及 PATHEXT 中的所有文件扩展名。
请注意,每个用户帐户都有自己的路径。因此,系统帐户的 PATH 通常与标准用户帐户的 PATH 不同。这对于使用命令runas运行批处理文件或使用其他帐户运行任务调度程序非常重要。
Jason Faulkner发布的批处理文件也非常有用。
开始在注册表项下进一步查看
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ App Paths
HKEY_CURRENT_USER \ Software \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ App Paths
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ App Paths
HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ App Paths
使用msiexec安装MSI软件包(嵌入在安装程序EXE中或单独发布)的应用程序的文件名在应用程序路径下注册,默认字符串值包含可执行文件的名称和完整路径。通常有第二个字符串值,其名称为 Path ,仅包含应用程序可执行文件的完整路径。其他安装程序也在App Paths
中注册了一个应用程序,请参阅Microsoft文章Application Registration。
registry hive HKEY_CURRENT_USER
中的应用路径键通常不存在,因为安装是使用受信任的安装程序或本地管理员帐户完成的,因此已安装的应用程序的注册已完成在注册表配置单元HKEY_LOCAL_MACHINE
中。但是,对于每个用户安装的应用程序,HKCU
路径用于应用程序注册而不是HKLM
路径。
Wow6432Node 键下的应用路径键仅存在于Windows x64上。但是x86应用程序通常在 App Paths 中注册,尽管 Wow6432Node 适用于32位应用程序,而另一个树适用于Windows 7 x64,Windows Server 2008上的64位应用程序R2 x64及更高版本的Windows x64。有关详细信息,请参阅Microsoft文章Registry Keys Affected by WOW64。
还有一点需要注意:
即使指定了.exe
,开始也会在当前工作目录以及路径的目录中搜索AppName.exe
之后{ {1}}并检查文件扩展名(上一期后的字符串)对照 PATHEXT 中的文件扩展名,如果这返回一个或多个文件名。然而,最好指定要启动的应用程序的文件扩展名,因为如果在当前目录中找不到AppName.exe.*
,则在执行通配符搜索之前始终首先搜索AppName.exe
。< / p>
Sysinternals(Microsoft)的免费工具Process Monitor是一个很好的工具,可以找到类似的东西。
最后但并非最不重要的是,对于没有可执行文件 start 还检查HKEY_CLASSES_ROOT以查找文件关联以打开文件或URI(URL)以及为命令打开定义的关联应用程序。这就是下面这样的东西也有效的原因。
AppName.exe
包含start MyTextFile.txt
start https://stackoverflow.com/
代码的 %SystemRoot%\System32\cmd.exe
使用Windows shell函数ShellExecuteEx来执行应用程序或打开带有关联应用程序的文件或URL。
答案 1 :(得分:0)
您可以使用此批处理文件来检测系统解析相关EXE的位置:
@ECHO OFF
REM Save this as C:\CheckPath.bat
IF NOT "%~$PATH:1" == "" (
ECHO %~$PATH:1
) ELSE (
ECHO Could not find "%~1" inside of a registered PATH.
)
现在正在运行:
C:\CheckPath.bat cmd.exe
返回C:\Windows\System32\cmd.exe
C:\CheckPath.bat NotValid.exe
返回Could not find "NotValid.exe" inside of a registered PATH.
尝试运行CheckPath.bat MATLAB.exe
,您可以看到系统解析路径的位置。
注意 - 假设您没有在脚本中重新定义%PATH%
,这将解析目录。