批处理 如何启动程序

Posted

技术标签:

【中文标题】批处理 如何启动程序【英文标题】:Batch How to start a program 【发布时间】:2017-04-09 09:17:04 【问题描述】:

我想创建一个批处理文件来在我的可执行文件对其自身进行一些更改后启动它。

我的批处理文件是:

START /D "C:\Users\me\AppData\Roaming\Test\Test.exe"

当我运行它时,虽然我只是得到一个短暂的控制台闪烁,但 Test.exe 没有启动。

我已验证该 EXE 是否在目录中。 我已经手动启动了 exe 以验证它是否正常工作。

我的批处理文件位于

C:\Users\admin\AppData\Roaming\run.bat"

【问题讨论】:

/D 表示起始目录。删除它。 当我把它不带 /d 时,我会显示一个命令提示符窗口,但我的 Test.exe 没有启动 它可能认为你的论点是一个标题(见start /?)。试试start "" "c:\users\me\appdata\roaming\test\test.exe" 始终从命令提示符运行批处理脚本,而不是双击它们。这样,您实际上可以阅读得到的错误是什么。 【参考方案1】:

有两个问题:

    /D 选项仅定义起始目录或工作目录,而不是要执行的程序。 start 命令将第一个引用的参数视为新窗口的标题。为避免与其他参数混淆,请始终提供窗口标题(也可能为空)。

有两种解决方案,实际上并不完全等效:

    去掉/D选项,所以使用当前工作目录:

    start "" "C:\Users\me\AppData\Roaming\Test\Test.exe"
    

    保留/D 选项并明确提供要使用的新工作目录:

    start "" /D "C:\Users\me\AppData\Roaming\Test" "Test.exe"
    

【讨论】:

【参考方案2】:

试着改成这个

start /d "C:\Users\me\AppData\Roaming\Test" Test.exe

您将看到控制台闪烁,您的程序应该会启动。

更新

感谢@SomethingDark 建议使用以下代码。

start "" C:\Users\me\AppData\Roaming\Test\Test.exe

但是,如果您的文件名包含空格,上述代码将不起作用。

【讨论】:

你有一个额外的报价,/D 标志不属于。 @SomethingDark 谢谢。 /D flag doesn't belong 是什么意思? 意思是把它拿出来用完整路径代替。 start "" C:\Users\me\AppData\Roaming\Test\Test.exe 我收到错误Windows cannot find the file. Make sure you typed the name correctly, and then try again.,但使用上面提供的代码,exe 文件已成功打开。 @SomethingDark 我发现了它为什么不起作用。检查更新。【参考方案3】:

将任何超过一个单词的目录名称用引号引起来。所以如下路径:

   start C:\Program Files\mysql\MySQL Workbench 8.0 CE\MySQL.exe

应该变成这样:

   start C:\"Program Files"\MySQL\"MySQL Workbench 8.0 CE"\MySQL.exe

【讨论】:

我知道它有效,但是 - 不要那样做。始终引用完整路径:"C:\Program Files\MySQL\MySQL Workbench 8.0 CE\MySQL.exe"(并添加一个伪标题:start "" "blah blah"【参考方案4】:

尝试使用以下命令。将其添加到批处理脚本中。请注意,如果路径字符串中有空格,则必须在 start 关键字后添加双引号。

start "" "C:\Users\me\AppData\Roaming\Test\Test.exe"

【讨论】:

以上是关于批处理 如何启动程序的主要内容,如果未能解决你的问题,请参考以下文章

如何将程序添加到系统服务实现开机自启动

如何在windows里面启动一个程序的时候,让另一个程序也伴随运行?需要在这个程序后面加啥参数?

如何在程序启动后在不打开控制台的情况下从批处理文件运行程序?

当从控制器启动的作业失败时,如何防止弹簧批处理关闭应用程序?

如何使用任务计划程序重新启动 Windows 服务

如何从 sed 文件启动多个应用程序