我有一个计划任务,启动每小时运行一次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])
参数:
你是否按计划执行这个任务? 如果这样设置它作为一个不同的用户帐户运行,那么它将不会被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