在没有窗口的计划任务中运行.bat文件

我有一个计划任务,启动每小时运行一次robocopy的批处理脚本。 每次运行一个窗口时都会popup一个robocopy的输出结果,我真的不想看到这个结果。

我设法通过使预定作业运行来使窗口最小化

 cmd /c start /min mybat.bat 

但是每个小时都给我一个新的命令窗口。 我对此感到惊讶,因为cmd /c “执行string指定的命令,然后终止” – 我一定误解了文档。

有没有办法运行批处理脚本,而不popup一个cmd窗口?

    您可以使用Windows脚本文件静默运行它。 运行方法允许您以隐形模式运行脚本。 像这样创build一个.vbs文件

     Dim WinScriptHost Set WinScriptHost = CreateObject("WScript.Shell") WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0 Set WinScriptHost = Nothing 

    并安排它。 本例中的第二个参数设置窗口样式。 0表示“隐藏窗口”。

    Run方法的完整语法:

      object.Run(strCommand, [intWindowStyle], [bWaitOnReturn]) 

    参数:

    • 对象:WshShell对象。
    • strCommand:表示要运行的命令行的string值。 您必须包含要传递给可执行文件的任何参数。
    • intWindowStyle:可选。 整数值,表示程序窗口的外观。 请注意,并非所有程序都使用此信息。
    • bWaitOnReturn:可选。 布尔值,指示脚本是否应该等待程序完成执行,然后继续脚本中的下一个语句。 如果设置为true,脚本执行将暂停,直到程序结束,然后运行返回程序返回的任何错误代码。 如果设置为false(缺省值),则Run方法在启动程序后立即返回,自动返回0(不能被解释为错误代码)。

    你是否按计划执行这个任务? 如果这样设置它作为一个不同的用户帐户运行,那么它将不会被login的用户看到。 如果脚本不需要networking访问需要Windows身份validation的项目(如文件共享或打印机),则可以将其作为“nt authority \ system”运行,并将密码留空。 在Windows 7上,将用户设置为SYSTEM,然后按OK。

    (如果您使用的是robocopy,您可能必须使用真实的用户…)

    JR

    只需将“计划任务”configuration为“运行用户是否login”。

    你也可以尝试CHP(创build隐藏进程) ,确实如你所想…

    CHP.EXE mybat.bat

    无命令窗口运行。 完善! 和CMDOW一样由人来做,但是这样比较合适。

    CMDOW是一个简单的工具,可以让你从命令行执行很多很多事情。

    最简单的事情之一是隐藏当前窗口(通常作为bat文件中的第一行):

     cmdow @ /hid 

    或者开始一个新的隐藏进程

     cmdow /run /hid mybat.bat 

    尝试调用脚本

     start /b <command> 

    您可以创buildbatch file的快捷方式,将快捷方式设置为最小化(在快捷方式的属性中,“快捷方式”选项卡),然后设置作业以启动快捷方式。

    重要说明 :您需要手动指定快捷方式的path,方法是在“运行”文本字段中input“.lnk”扩展名; 如果您只是尝试浏览它,它将自动redirect到快捷方式指向的任何地方。

    我用过的另一个解决scheme是Hidden Start

    我意识到这个问题已经被回答了一个非常好的Windows解决scheme,因此应该是最兼容的,我完全同意。

    我也想说,我不同意@ splattne的评论(但不是他的实际答案) – 在另一个引用的线程的决议值得信任。 该答案涉及以不同的用户(SYSTEM)运行脚本,这几乎相当于赋予脚本根访问权限。 对于需要networking访问的ROBOCOPY (John Rennie引用)等工作也会失败。

    我从来没有尝试过CMDOW ,但我想提供另一个类似的解决scheme,虽然不是本地安装在Windows上,但是对于大多数版本来说,它仍然是高度可移植的,它们都是32位和64位版本。是NirCmd 。

    NirCmd是一个function非常强大的工具,有很多选项,其中最有用的一个,我个人认为它能够通过简单地执行以下操作来启动隐藏的命令窗口:

     c:\path\to\nircmd.exe exec hide "c:\path\to\mybat.bat" 

    从NirCmd命令参考的exec部分:

     exec [show/hide/min/max] [application + command-line] 

    运行应用程序,并为执行的应用程序指定一个或多个命令行参数。 参数[show / hide / min / max] 指定正在运行的应用程序是否可见。 如果指定了“隐藏”,则正在运行的应用程序对用户将不可见。 如果指定了“max”,正在运行的应用程序窗口将被最大化。 如果指定“min”,正在运行的应用程序窗口将被最小化。

    编辑:我试图运行一个ROBOCOPY作业,并尝试在这个答案中的方法,即使在编辑networking访问权限后,它并没有工作。 我试着双击这个脚本,但是不能让它工作,但是只能让它在提升的命令提示符下运行。 我创build了一个batch file的快捷方式,并以pipe理员身份运行,并能够通过双击执行它,但是我最终select的方法是将其隐藏为SYSTEM(我知道,我知道) – 但它确实与ROBOCOPY工作,只要batch file具有正确的权限即可。

    编辑2:由于某种原因,它不会作为系统(可能是networking访问事物前面引用) – 我只注意到这实际运行ROBOCOPY没有/ L标志,这基本上只是一个模拟和[显然]不'实际上连接到远程系统,但是当我运行具有最高权限的batch file,并检查隐藏的框,我仍然可以作为login的用户在后台运行,没有一个命令窗口显示,无论这是值得任何人。

    尝试在batch file的末尾放入一个退出命令。 这应该在脚本完成时closures命令窗口。

    要隐藏输出(尽pipe不是窗口),将其添加到batch file的开头:

     @echo off