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

我设法通过运行计划的作业来使窗口显示为最小化

cmd /c start /min mybat.bat


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

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

评论

我发现这是一个更可取的答案stackoverflow.com/questions/6568736 / ...

#1 楼

您可以改为使用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(不会被解释为错误代码)。


评论


+1,只是写了完全一样的东西

– Sam Cogan
09年5月17日在9:10

用户名,老实说,我认为Sam应该得到的比我更多。但是还是谢谢你!而且不要在同一句话中提到我和乔恩·斯基特。真是亵渎! ;-)

–splattne
09年5月17日14:00

对于“是否有一种方法可以运行批处理脚本而不会弹出cmd窗口?”这个问题,它给出了一个非常直接的答案:使用Windows脚本文件运行它。

– Mark Meuer
2012年8月2日在15:51

@李我猜如果您的路径包含空格,双引号是必要的。

–splattne
16-3-21在13:13

可能不言而喻,但是在Task Scheduler中,通过将“ Action”设置为运行wscript(通常为%WINDIR%\ System32 \ wcript.exe)并使用标准的路径来使用wscript.exe运行.vbs文件。 vbs文件作为参数。 (其他用例可能使用cscript-与wscript相同的目录)

– GT。
20-2-28在6:18

#2 楼

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

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

JR

评论


谢谢-与.vbs选项相比,这对我来说没有那么麻烦。

–马基尼
2010-2-10在16:45

我将“运行方式”用户设置为SYSTEM(后来更改为NT AUTHORITY \ SYSTEM),它对我有用。我的计划任务运行时,我不再看到弹出的CMD窗口。谢谢!

– Ryan Stille
2011-3-25在17:28

+1,这很优雅。确保输入“ system”作为用户名,然后win7为您完成其余工作。请注意,您确实可以通过网络访问Internet,只是不能访问网络共享和需要Windows身份验证的内容。

–令人无法恢复的莫妮卡
2012年3月2日在4:36

系统用户简洁大方,提示很棒! +1!

–马特奥·康塔(Matteo Conta)
2012年10月30日在8:40

请参阅实施最小特权管理模型。为此使用系统帐户是否违反最小特权策略?如果是这样,那么管理员应该知道在大多数情况下不要这样做。

–user34660
18年4月13日在16:54

#3 楼

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

评论


完善!您甚至可以禁用凭据存储,这最终比让SYSTEM运行它更安全!

– Binki
15年8月19日在17:50

#4 楼

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


CHP.EXE mybat.bat


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

评论


当您需要在已登录用户的上下文中运行任务时完美工作(“触发器:在连接到用户会话时”,“以以下身份运行任务:用户”)

–谢尔盖
17年8月7日在6:10

这不是内置工具

–JonnyRaa
17-10-9在11:04

#5 楼

CMDOW是一个非常棒的工具,它使您可以从命令行对窗口执行许多操作。

最简单的操作之一是隐藏当前窗口(通常作为蝙蝠的第一行)文件),其内容如下:

cmdow @ /hid


,或者使用

cmdow /run /hid mybat.bat 

开始一个新的隐藏进程

评论


这和Rocketmonkeys的建议都涉及下载新工具,这意味着在各种人的台式机上具有更大的兼容性。使用Windows命令进行烘焙会更好。

– IanVaughan
2011-2-9 15:14

Plus cmdow被某些防病毒程序检测为“危险”(这不是危险的,但是如果cmdow文件被隔离,则检测本身可能会引起一些问题...)。

–石油
2012-12-10 15:36



仍然有弹出式控制台,只是闪烁非常快。

–竹
2014年7月22日在10:37

#6 楼

尝试使用

start /b <command>

调用脚本

评论


这不起作用,“计划任务”->“状态”状态为“无法启动”,即:开始/ b C:\ file.bat:和:开始/ b“ C:\ file.bat”:但是:C:\ file.bat:工作正常。

– IanVaughan
2011-2-9 15:12

因为启动不是程序,所以它是命令。您需要将cmd指定为要运行的程序,并将/ c start / b 指定为参数。但是,由于它仍将为cmd创建一个控制台窗口并在屏幕上闪烁一个黑色窗口,因此仍然无法使用。

– Synetech
2015年10月2日在20:23

也可以使用@Synetech确认这将不会创建新窗口,但是您仍然需要打开控制台窗口才能启动它。这确实是一个方便的命令,但不能按计划任务的要求使用。

–乔纳森·戴维·阿恩特(JonathanDavidArndt)
17年7月17日在12:12

#7 楼

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

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

评论


这在Windows 10 x64上不起作用,弹出窗口“您想如何打开该文件?”

– Jan
16/12/13在15:22



#8 楼

我意识到这个问题已经以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"


来自The的exec部分NirCmd命令参考:

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


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

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

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

#9 楼

我使用的另一个解决方案是“隐藏启动”

#10 楼

尝试在批处理文件的末尾添加退出命令。脚本完成后,这应该关闭命令窗口。

#11 楼

要隐藏输出(尽管不是窗口),请将其添加到批处理文件的开头:

@echo off