我有一个“设置”脚本,我在早上运行,启动我需要的所有程序。现在其中一些需要额外的环境设置,所以我需要将它们包装在小型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中没有任何标志符合我的账单。
答案 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