在哪里" START"搜索可执行文件?

时间:2014-12-09 15:27:11

标签: windows matlab batch-file cmd

在我的公司,我们使用批处理文件启动Matlab。批处理文件在启动Matlab之前准备环境。

Matlab本身以

开头
START MATLAB.EXE

我的系统上安装了几个版本的Matlab。而且这个命令启动了错误的Matlab版本。 START在哪里寻找可执行文件?

2 个答案:

答案 0 :(得分:8)

命令 start 查找可执行文件,如命令行解释程序 cmd.exe ,如果没有使用绝对路径,则使用环境变量 PATHEXT中列出的扩展名如果文件扩展名也缺失,则以分号分隔。

  1. 当前工作目录。

  2. 环境变量 PATH 的所有目录按照路径中的顺序排列。

    只需输入命令提示符窗口set path即可查看 PATH 中的所有目录以及 PATHEXT 中的所有文件扩展名。

    请注意,每个用户帐户都有自己的路径。因此,系统帐户的 PATH 通常与标准用户帐户的 PATH 不同。这对于使用命令runas运行批处理文件或使用其他帐户运行任务调度程序非常重要。

    Jason Faulkner发布的批处理文件也非常有用。

  3. 开始在注册表项下进一步查看

    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

  4. 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%,这将解析目录。

相关问题