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

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

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

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

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

START/B CMD env-script.bat产生相同的结果。 CMD中的旗帜都不符合我的账单。

其实,下面的工作适合我,并创build新的窗口:

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 

如Moshe所指出的,如果你不想让新窗口在你面前产卵,那么把它和参数结合起来,比如/min

两岁,但完整性…

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

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

注意:1. CALL与.bat文件配对,因为它通常在哪里..(即这只是CMD /C CALL "foo.bat"forms的扩展,使其asynchronous通常需要正确获得退出代码,但这不是一个问题)。 2.只有当名称包含空格时,才需要双引号.bat文件。 (这个名字可能是一个path,在这种情况下有更多的可能性)。

如果你不想输出:

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

如果你想让蝙蝠在一个独立的控制台上运行 (即另一个窗口)

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

如果你想让另一个窗口在之后挂起:

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

注意:这实际上是一个糟糕的forms,除非你的用户特别想使用打开的窗口作为一个普通的控制台。 如果你只是想让窗口继续看到输出,最好把PAUSE放在bat文件的末尾。 或者甚至在命令行之后添加^& PAUSE

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

由于START是从CMD脚本中执行背景内容的唯一方法,因此我build议您继续使用它。 而不是/ B修饰符,尝试/ MIN,所以新创build的窗口不会打扰你。 另外,您可以使用/ LOW或/ BELOWNORMAL将优先级设置为较低的值,这会提高系统的响应速度。

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

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

将其命名为sth.vbs,并从bat中调用它,放入sheduled任务等。个人我将禁用任何Windows系统下的vbs加速pipe理:)

创build一个新的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(); } 

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

 call notepad.exe & 

最后这个选项其实很简单:

c:\ start BATCH.bat -WindowStyle隐藏