如何通过批处理在未安装的程序中打开未注册的文件?

时间:2016-01-06 14:39:37

标签: batch-file cmd

首先,我看过this

现在,我想在程序中打开一个未注册的扩展名的文件,这个文件没有安装在windows中,所有文件都是批处理的。

START "%~dp0\arch\file.nesta" "%~dp0\Virtua.exe"
rem this will open only program

pause

START "" "%~dp0\arch\file.nesta" "%~dp0\Virtua.exe"
rem and this will summon "Open in program" win window

要点是一次(双击)将文件拖放到程序中 (当文件在" arch"子文件夹中)时,exe文件和bat文件ar在同一文件夹中

1 个答案:

答案 0 :(得分:2)

命令START

的语法

Squashman已经给出了(几乎)正确答案,我将在此详细解释。

在命令提示符窗口start /?中运行显示此命令的帮助,该命令也由Microsoft在页面上描述左侧的整个start命令command line reference

在命令 START 之后,应该在双引号中指定"title for command window"。如果要启动的应用程序是GUI应用程序而不是命令或控制台应用程序,则此字符串也可以是使用""指定的空字符串。 GUI窗口的标题始终由GUI应用程序定义,而不是由命令处理器定义。因此,有意义的标题字符串而不是空标题字符串仅对在新控制台窗口中执行的Windows命令处理器的控制台应用程序和命令有意义。

如果双引号括起的整行没有字符串,则不需要双引号的标题字符串,因为没有参数字符串包含空格或此列表中的字符:&()[]{}^=;!'+,`~在命令提示符窗口cmd /?

中运行时,此字符列表显示在最后一个输出帮助页面的末尾

如果任务中需要其中一个参数,则必须在该行指定 START 本身的一个或多个可选参数。

下一个参数必须是作为新进程运行的命令或应用程序。 START 也可用于仅使用新的控制台窗口启动新的命令进程,因此不得指定命令或应用程序。但 START 在批处理文件通常中用于在单独的进程中运行应用程序,而不是仅打开新的命令提示符窗口。

最后指定要启动的命令或应用程序的参数。

这在实践中意味着什么?

使用引号

中的一个参数命令START
START "%~dp0\arch\file.nesta"

命令 START 在这种情况下创建一个新的命令进程,其中Drive and path of batch file\arch\file.nesta作为窗口标题栏中显示的新控制台窗口的标题。因此,双引号中的单个字符串由命令 START 解释为新命令窗口的标题字符串。

使用错误顺序的引号中的两个参数命令START

START "%~dp0\arch\file.nesta" "%~dp0\Virtua.exe"

如果Virtua.exe是控制台应用程序,则会导致在Drive and path of batch file\arch\file.nesta作为新控制台窗口标题的批处理文件目录中启动Virtua.exe

但即使Virtua.exe是一个GUI应用程序,字符串%~dp0\arch\file.nesta已被命令 START 占用,因为窗口标题未在任何地方显示,因此Virtua.exe始终使用此命令行启动无参数。

使用正确顺序的引号中的两个参数命令START,并且缺少必需的标题字符串

START "%~dp0\Virtua.exe" "%~dp0\arch\file.nesta"

这导致(很可能)在错误消息中,Drive and path of batch file\Virtua.exe被解释为标题,命令处理器无法在目录Drive and path of batch file\arch中找到名称为file.nesta.*且文件扩展名的文件在环境变量 PATHEXT 中列出。

使用正确顺序的引号中的两个参数命令START,并使用必需的标题字符串

START "" %~dp0Virtua.exe" "%~dp0arch\file.nesta"

这是在批处理文件目录中启动Virtua.exe的正确命令,批处理文件夹的子文件夹file.nesta中为arch作为Virtua.exe的参数并给出控制台窗口如果Virtua.exe是控制台应用程序,则无标题。

%~dp0之后没有反斜杠,因为命令处理器总是将此字符串扩展为驱动器,并且在命令 START 处理参数之前已经使用反斜杠结束批处理文件的路径。

使用%~dp0\会在批处理文件文件夹的路径之间产生\\,例如Virtua.exe,这不是100%正确的。但是,Windows会自动清除内部带有\\的文件和文件夹字符串,因此这个小错误对执行没有影响。

摘要

  1. 在START 后,在双引号中首先指定始终字符串标题字符串可使您的批处理编码更轻松。

  2. ""用于GUI应用程序,将"Something meaningful"用于命令或控制台应用程序作为标题字符串,使批处理文件的用户更容易识别打开的控制台窗口的用途在使用Alt + Tab显示的正在运行的应用程序列表中,在Windows任务栏中,具体取决于所使用的任务栏选项(仅显示符号或带窗口标题开头的符号)和Windows任务管理器。

  3. 注意:

    有引用参数和引用参数的组合,不需要带引号的标题字符串。但是,总是更容易指定标题字符串,而不是找出何时必须指定引号中的标题字符串,以及何时可以省略它,如果任何参数都用引号括起来。