如何在另一个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隐藏