使用Visual基础执行多个bat文件

时间:2015-06-18 10:40:22

标签: vb.net batch-file cmd

我正在使用Visual Studio 2013创建的程序。该程序做了一些事情,我几乎完成了,但最后一个问题出现了。

在程序中我有三个按钮。一个"强制重启","手动启动"和一个强制停止"。 "强制停止"停止一堆程序,并强制重启"停止它们然后再次启动它们。 "手动启动"启动所有程序。我将使用"手动启动"例如,进一步向下。

这些按钮背后发生的是它启动了一堆蝙蝠文件来完成这项工作。蝙蝠文件包含tasskill /f /im program.exestart "c:\program.exe"。然后是超时并退出的第二个。

问题:

到目前为止一切顺利。问题是当批处理启动程序时,VB程序不会移动到下一个bat文件。它使cmd.exe运行。即使我在批次中有exit。现在,如果我进入并手动关闭程序或cmd.exe,那么它将从下一个bat文件开始。

现在基本上是这样的:VB按钮 - >批量开始 - >批量运行程序 - >批次不关闭AKA VB不会移动到下一批。

它应该是这样的:VB按钮 - >批量开始 - >批量运行程序 - >批次退出 - >下一批开始 - >批量运行程序 - >批量退出 - > ...

以下是我在VB脚本部分中所得到的内容:

Private Sub btnManualStart_Click(sender As Object, e As EventArgs) Handles btnManualStart.Click
If MessageBox.Show("Do you want to manually start all programs and services?", "OBS", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
        Timer2.Start()
        Dim FileNum As Integer = FreeFile()
        FileClose(FileNum)
        TextBox1.Text &= Environment.NewLine & TimeOfDay & (" Manual start made")
        Dim shell
        shell = CreateObject("wscript.shell")
        shell.run("C:\RestartApps\Scripts\Start_program1.bat", 0, True)
        shell.run("C:\RestartApps\Scripts\Start_program2.bat", 0, True)
        shell.run("C:\RestartApps\Scripts\Start_program3.bat", 0, True)
        shell.run("C:\RestartApps\Scripts\Start_program4.bat", 0, True)
        shell = Nothing
end if

希望这是可以理解的。

2 个答案:

答案 0 :(得分:2)

我不确切知道您的批次在做什么,但在我看来,您可以简单地使用Shell快捷方式:

Dim commands As String() = {
    "C:\RestartApps\Scripts\Start_program1.bat",
    "C:\RestartApps\Scripts\Start_program2.bat",
    "C:\RestartApps\Scripts\Start_program3.bat",
    "C:\RestartApps\Scripts\Start_program4.bat"
}

For Each cmd As String In commands
    Shell(cmd, AppWinStyle.Hide, False)
Next

确保在重载(String,AppWinStyle,Boolean)上将第三个参数设置为FALSE。这个布尔值确保执行被设置为" fire and forget"。 (与你已经传递的那个相同,为TRUE(等待退出代码))。

编辑:将AppWinStyle更改为隐藏,这将以静默方式运行您的批次

答案 1 :(得分:1)

您需要改进批处理脚本中使用的start,如下所示:

start "" /B "c:\program.exe"

Start命令:启动程序,命令或批处理脚本(opens in a new window)。注意:

  • ""始终包含 TITLE 这可以是一个简单的字符串,也可以只是一对空引号"";
  • /B启动应用而不创建新窗口

另一种方法:使用call代替start "",如下所示:

call "c:\program.exe"