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

Tom*_*ham 158 scripting windows command-line-interface scheduled-task windows-command-prompt

我有一个计划任务,它启动一个robocopy每小时运行一次的批处理脚本。每次它运行时,桌面上都会弹出一个带有 robocopy 输出的窗口,我真的不想看到。

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

cmd /c start /min mybat.bat
Run Code Online (Sandbox Code Playgroud)

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

有没有办法在不弹出 cmd 窗口的情况下运行批处理脚本?

spl*_*tne 156

您可以改为使用 Windows 脚本文件静默运行它。Run 方法允许您在不可见模式下运行脚本。创建一个.vbs这样的文件

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

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

Run 方法的完整语法:

 object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
Run Code Online (Sandbox Code Playgroud)

参数:

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

  • 对于“有没有办法在不弹出 cmd 窗口的情况下运行批处理脚本?”这个问题,它给出了一个非常直接的答案:使用 Windows 脚本文件运行它。 (3认同)
  • @Lee 我猜如果您的路径包含空格,则需要双引号。 (2认同)
  • 可能不言而喻,但在任务计划程序中,通过将“操作”设置为运行 *wscript*(通常为“%WINDIR%\System32\wcript.exe”)并使用完全- .vbs 文件的限定路径作为参数。(其他用例可能使用 *cscript* - 与 *wscript* 相同的目录) (2认同)

Joh*_*nie 63

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

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

JR

  • 我将“运行身份”用户设置为 SYSTEM(后来更改为 NT AUTHORITY\SYSTEM)并且它对我有用。当我的计划任务运行时,我不再看到弹出的 CMD 窗口。谢谢! (8认同)
  • 谢谢 - 这对我来说比 .vbs 选项少麻烦。 (3认同)
  • 请参阅[实施最低特权管理模型](https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/implementing-least-privilege-administrative-楷模)。为此使用系统帐户是否违反了最低权限政策?如果是这样,那么管理员应该知道在大多数情况下**不**这样做。 (2认同)

小智 38

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

  • 完美的!您甚至可以禁用凭证存储,然后这比让 SYSTEM 运行它更安全! (9认同)
  • 请注意,它需要“作为批处理作业登录”权限才能执行此操作 - 普通用户帐户没有此权限 (4认同)

小智 19

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

CHP.EXE mybat.bat

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

  • 这不是内置工具 (2认同)

its*_*dok 10

CMDOW是一个很棒的工具,它允许您从命令行对 Windows 执行很多很多事情。

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

cmdow @ /hid
Run Code Online (Sandbox Code Playgroud)

或开始一个新的隐藏进程

cmdow /run /hid mybat.bat 
Run Code Online (Sandbox Code Playgroud)

  • 这和 Rocketmonkeys 的建议都涉及下载新工具,这意味着对各种人的桌面有更多的兼容性。使用 windows 命令的烘焙效果要好得多。 (4认同)
  • 仍然有弹出控制台,只是快速闪烁。 (3认同)

小智 6

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

重要提示:您需要手动指定快捷方式的路径,方法是在“运行”文本字段中输入快捷方式,并加上“.lnk”扩展名;如果您只是尝试浏览它,它将有助于将自己重定向到快捷方式指向的任何内容。


小智 5

尝试调用脚本

start /b <command>
Run Code Online (Sandbox Code Playgroud)

  • 这不起作用,计划任务-&gt;状态显示“无法启动”,即: start /b C:\file.bat : 和 : start /b "C:\file.bat" : but : C:\ file.bat :工作得很好。 (2认同)