代码之家  ›  专栏  ›  技术社区  ›  Aaron Digulla

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

  •  81
  • Aaron Digulla  · 技术社区  · 16 年前

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

    如何在后台在WindowsXP上运行这样的脚本?

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

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

    START/B CMD env-script.bat 产生相同的结果。CMD中的所有标志似乎都不符合我的账单。

    7 回复  |  直到 6 年前
        1
  •  66
  •   Joey Gumbo    16 年前

    实际上,以下功能对我很好,并创建了新窗口:

    测试:CMD:

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

    测试2.CMD

    @echo off
    echo Test 2
    pause
    exit
    

    Test3.CMD

    @echo off
    echo Test 3
    pause
    exit
    

    把它和参数结合起来 start ,如 /min 正如莫什指出的那样,如果你不想让新的窗户在你面前产生。

        2
  •  129
  •   antak Jason    13 年前

    两岁,但为了完整…

    标准直列进近: (即使用时的行为 & 在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 [...]]
    

    注意:这实际上是一种糟糕的形式,除非您的用户特别希望将打开的窗口用作普通控制台。如果你只是想让窗口停留在周围以便看到输出,最好是把 PAUSE 在BAT文件的末尾。或者即使是现在,加上 ^& PAUSE 在命令行之后:

    START CMD /C CALL "foo.bat" [args [...]] ^& PAUSE
    
        3
  •  7
  •   Moshe    16 年前

    由于start是从cmd脚本在后台执行某项操作的唯一方法,因此我建议您继续使用它。请尝试/min,而不是/b修改器,这样新创建的窗口就不会打扰您了。此外,您还可以将优先级设置为具有/低或/低于正常值的较低级别,这样可以提高系统响应能力。

        4
  •  3
  •   MeaCulpa    13 年前

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

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

    把它命名为sth.vbs,并从BAT调用它,放入计划任务等。 在我管理的任何Windows系统上,Personallyi都将立即禁用vbs:)

        5
  •  0
  •   LegendLength    16 年前

    创建一个新的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();
    }
    
        6
  •  0
  •   Peter Mortensen icecrime    10 年前

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

    call notepad.exe & 
    
        7
  •  0
  •   Sahil Mahajan Mj ila123    6 年前

    实际上,在最后使用此选项非常简单:

    C:\Start batch.bat-隐藏窗口样式

    推荐文章