如何从另一个bat文件在后台运行bat文件?

时间:2009-03-16 08:27:36

标签: windows-xp batch-file cmd

我有一个“设置”脚本,我在早上运行,启动我需要的所有程序。现在其中一些需要额外的环境设置,所以我需要将它们包装在小型BAT脚本中。

如何在后台运行Windows XP上的这样一个脚本?

CALL env-script.bat同步运行它,即只有在env-script中的命令终止后才能继续安装脚本。

START/B env-script.bat在同一个命令提示符下运行另一个CMD.exe实例,使其处于非常混乱状态(我看到嵌套CMD.exe的输出,键盘已经死了一段时间,脚本不是执行)。

START/B CMD env-script.bat产生相同的结果。 CMD中没有任何标志符合我的账单。

7 个答案:

答案 0 :(得分:129)

两岁,但为了完整......

标准,内联方法:(即在Linux中使用&时获得的行为)

START /B CMD /C CALL "foo.bat" [args [...]]

注意:1。CALL与.bat文件配对,因为它通常在哪里...(即这只是CMD /C CALL "foo.bat"表单的扩展,使其异步。通常,它是需要正确获取退出代码,但这不是问题。); 2.仅当名称包含空格时,才需要.bat文件周围的双引号。 (该名称可能是一种路径,在这种情况下,更有可能。)。

如果您不想要输出:

START /B CMD /C CALL "foo.bat" [args [...]] >NUL 2>&1

如果您希望在独立控制台上运行bat:(即另一个窗口)

START CMD /C CALL "foo.bat" [args [...]]

如果您希望其他窗口随后停留:

START CMD /K CALL "foo.bat" [args [...]]

注意:除非您有特别想要将打开的窗口用作普通控制台的用户,否则这实际上是不好的形式。如果你只是想让窗口留在那里以便看到输出,那么最好在bat文件的末尾添加PAUSE。或者甚至在命令行后添加^& PAUSE

START CMD /C CALL "foo.bat" [args [...]] ^& PAUSE

答案 1 :(得分:67)

实际上,以下工作正常,并创建新窗口:

TEST.CMD:

@echo off
call "cmd /c start test2.cmd"
call "cmd /c start test3.cmd"
echo Foo
pause

test2.cmd

@echo off
echo Test 2
pause
exit

test3.cmd

@echo off
echo Test 3
pause
exit

将其与start的参数相结合,例如/min,正如Moshe指出的那样,如果您不希望新窗口在您面前产生。

答案 2 :(得分:7)

由于START是从CMD脚本在后台执行某些操作的唯一方法,我建议您继续使用它。而不是/ B修饰符,请尝试/ MIN,以便新创建的窗口不会打扰您。此外,您可以使用/ LOW或/ BELOWNORMAL将优先级设置为较低的值,这可以提高您的系统响应能力。

答案 3 :(得分:4)

除了前景/后台术语。 另一种隐藏运行窗口的方法是通过vbscript,如果你的系统仍然可用。

DIM objShell
set objShell=wscript.createObject("wscript.shell")
iReturn=objShell.Run("yourcommand.exe", 0, TRUE)

将其命名为sth.vbs并从bat调用它,放入已经完成的任务等。 我个人将在我管理的任何Windows系统上禁用vbs,而不是仓促:)

答案 4 :(得分:0)

创建一个新的C#Windows应用程序并从main调用此方法:

public static void RunBatchFile(string filename)
{
    Process process = new Process();

    process.StartInfo.FileName = filename;

    // suppress output (command window still gets created)
    process.StartInfo.Arguments = "> NULL";

    process.Start();
    process.WaitForExit();
}

答案 5 :(得分:0)

这适用于我的Windows XP Home安装,Unix方式:

call notepad.exe & 

答案 6 :(得分:0)

最后这个选项实际上很容易:

  

c:\ start BATCH.bat -WindowStyle Hidden