it-swarm.cn

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

我有一个计划的任务,该任务启动一个每小时运行robocopy的批处理脚本。每次运行时,都会在桌面上弹出一个窗口,其中包含robocopy的输出,我并不是很想看到。

我设法通过运行计划的作业来使窗口看起来最小化

cmd /c start /min mybat.bat

但这给了我每小时一个新的命令窗口。鉴于cmd /c“执行由字符串指定的命令然后终止”,我对此感到惊讶-我一定对文档有误解。

有没有一种方法可以运行批处理脚本而不会弹出cmd窗口?

144
Tom Dunham

您可以改为使用Windows脚本文件来静默运行它。运行方法允许您以不可见模式运行脚本。创建一个 .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:字符串值,指示要运行的命令行。您必须包括要传递给可执行文件的所有参数。
  • intWindowStyle:可选。指示程序窗口外观的整数值。请注意,并非所有程序都使用此信息。
  • bWaitOnReturn:可选。布尔值,指示脚本在继续执行脚本中的下一个语句之前是否应等待程序完成执行。如果设置为true,则脚本执行将暂停,直到程序完成为止,然后Run将返回程序返回的所有错误代码。如果设置为false(默认值),则Run方法在启动程序后立即返回,并自动返回0(不会被解释为错误代码)。
145
splattne

您是否将此作为计划任务运行?如果这样,则将其设置为以其他用户帐户运行,那么登录的用户将看不到它。如果脚本不需要网络访问需要Windows身份验证的项目(例如文件共享或打印机),则可以将其作为“ nt Authority\system”运行,并将密码保留为空。在Windows 7上,只需将用户设置为SYSTEM,然后按OK。

(如果您正在使用robocopy,则可能必须使用真实用户。)

JR

59
John Rennie

只需将计划任务配置为“无论用户是否登录都运行”。

29
Peter Meinl

您还可以尝试 CHP(创建隐藏进程) ,完全按照您的想法进行...

CHP.EXE mybat.bat

在没有命令窗口的情况下运行。完善!与CMDOW由同一个人制作,但这更合适。

18
rocketmonkeys

[〜#〜] cmdow [〜#〜] 是一个很棒的工具,它使您可以从命令行对Windows进行很多操作。

最简单的操作之一是使用以下命令隐藏当前窗口(通常作为bat文件的第一行):

cmdow @ /hid

或开始一个新的隐藏过程

cmdow /run /hid mybat.bat 
9
itsadok

尝试使用调用脚本

start /b <command>
5
rashfeather

您可以创建批处理文件的快捷方式,将快捷方式设置为开始最小化(在快捷方式的属性中,“快捷方式”选项卡),然后将作业设置为启动快捷方式。

重要:您需要通过在“运行”文本字段中键入快捷方式的路径来手动指定快捷方式的路径,并以'.lnk'扩展名完成;如果您只是尝试浏览它,它将很有帮助将自身重定向到快捷方式所指向的位置。

5
Doug Kavendek

我意识到这个问题已经以Windows固有的完美分辨率解决了,因此应该是最兼容的,我完全同意。

我还想说我不同意@splattne的评论(但不是他的实际答案)-另一个引用线程中的分辨率值得赞扬。该答案涉及以其他用户身份(SYSTEM)运行脚本,这几乎等同于授予脚本root用户访问权限。对于诸如ROBOCOPY(由John Rennie引用)之类的需要网络访问的作业,它也会失败。

我以前从未尝试过CMDOW,但我想提供另一个类似的解决方案,尽管该解决方案虽然不是Windows上的本地安装,但仍可高度移植到大多数版本,并且具有32位和64位版本,并且是 NirCmd

NirCmd是一个非常强大的工具,它具有无数的选项,其中最有用的是我个人认为的功能,它只需执行以下命令即可启动隐藏的命令窗口:

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

NirCmd命令参考exec部分中:

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

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

编辑:我正在尝试运行ROBOCOPY作业,并尝试了此答案中的方法,即使编辑了网络访问权限后,该方法也无法正常工作。我尝试双击该脚本,无法使其正常运行,但只能使其在提升的命令提示符下运行。我确实创建了一个批处理文件的快捷方式,并使其以管理员身份运行,并且能够通过双击该文件来执行它,但最终使用的方法是将其隐藏为系统运行(我知道,我知道) -但是,只要批处理文件具有正确的权限,它就可以使用ROBOCOPY来实现其价值。

编辑2:由于某种原因,它不能作为SYSTEM使用(可能是前面提到的网络访问权限)-我只是在实际运行ROBOCOPY之后才注意到这一点没有/ L标志,这基本上只是一个模拟,[显然]并没有真正连接到远程系统,但是当我以最高特权运行批处理文件并选中隐藏框时,我仍然可以将其作为在后台登录用户而没有显示命令窗口,这对任何人来说都是值得的。

1
rubynorails

我使用的另一个解决方案是 Hidden Start

0
SteveC