“START”在哪里search可执行文件?

在我的公司,我们使用batch file来启动Matlab。 batch file在启动Matlab之前准备好环境。

Matlab本身就是以此开始的

START MATLAB.EXE 

我有几个版本的Matlab安装在我的系统上。 而这个命令是开始错误的Matlab版本。 START在哪里寻找可执行文件?

Solutions Collecting From Web of "“START”在哪里search可执行文件?"

如果没有使用绝对路径,Command start将查找可执行文件,如同命令行解释程序一样运行。如果没有使用绝对路径,则另外使用环境变量PATHEXT中列出的扩展名,如果文件扩展名也缺失,则使用分号分隔。

  1. 当前工作目录。

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

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

    请注意,每个用户帐户都有自己的PATH 因此系统账户的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注册应用App Paths ,请参阅有关应用程序注册的 Microsoft文章。

注册表配置单元 HKEY_CURRENT_USERApp Paths键通常不存在,因为安装是使用受信任的安装程序或本地管理员帐户完成的,因此已注册的已安装应用程序在注册表配置单元HKEY_LOCAL_MACHINE 但是在应用程序的每个用户安装中, HKCU路径用于应用程序注册而不是HKLM路径。

Wow6432Node键下的App Paths键仅在Windows x64上存在。 但是x86应用程序通常在两个应用程序路径中注册,尽管Wow6432Node用于32位应用程序,而另一个树用于Windows 7 x64,Windows server 2008 R2 x64和更高版本Windows x64上的64位应用程序。 有关详细信息,请参阅Microsoft文章受WOW64影响的注册表项 。

还有一点注意:

即使指定了.exe文件,也会在当前工作目录以及PATH目录中搜索AppName.exe.*并在AppName.exe.*之后开始搜索,并在PATHEXT中检查文件扩展名(字符串在上一个句点之后)返回一个或多个文件名。 不过,指定应用程序的文件扩展名开始搜索AppName.exe始终是在执行通配符搜索之前完成的,前提是在当前目录中找不到AppName.exe

Sysinternals(微软)的免费工具进程监视器是一个很好的工具来找出这样的事情。

最后但并非最不重要的是,对于没有可执行文件,还要检查HKEY_CLASSES_ROOT文件关联是否打开一个文件或一个URI(URL),其中包含为命令打开而定义的相关应用程序。 这就是为什么像下面的东西也起作用的原因。

 start MyTextFile.txt start https://stackoverflow.com/ 

包含start代码的%SystemRoot%\System32\cmd.exe使用Windows shell函数ShellExecuteEx执行应用程序或打开文件或URL与关联的应用程序。

您可以使用此批处理文件来检测系统解决问题的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%