Windows脚本 - 运行静默但等待完成/返回正确的代码

时间:2012-07-25 22:13:14

标签: windows deployment batch-file scheduled-tasks windows-scripting

这是我的情况:

  • 我有一个需要很长时间才能运行的BAT文件(1分钟到70分钟)
  • 我使用Windows调度程序安排它每10分钟运行一次
  • 如果它在仍在运行时再次安排,则没有任何反应(这很好)

我的问题是我需要我的BAT静默运行,但事实并非如此。所以,我想用以下的Windows脚本启动它:

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "C:\Batch Files\syncfiles.bat" & Chr(34), 0
Set WshShell = Nothing

不幸的是,当我安排这个脚本时,它可以完成工作,但会立即返回 ,这使得Windows调度程序认为任务已经完成,而实际上BAT只是在某个地方自行运行。

因此,Windows将在10分钟后重新安排作业并进行多次运行。

我需要什么:

有没有办法告诉Windows脚本文件在进行/退出之前等待.Run命令的目标完成?基本上,我希望它的行为就像我启动了另一个线程,然后调用了它的连接,所以它可以做同样的事情,但是没有显示控制台窗口。

其他解决方案

告诉我任何其他方法让这个BAT静默执行(powershell命令,无论如何),我也会接受它作为解决方案。只是不要告诉我在C ++ / C#应用程序上写一个完整的,这太过分了:)


正在运行: Windows Server 2008 R2

2 个答案:

答案 0 :(得分:4)

我认为对于可选的第三个参数

,你需要的只是TRUE
WshShell.Run chr(34) & "C:\Batch Files\syncfiles.bat" & Chr(34), 0, TRUE

答案 1 :(得分:3)

这就是疯狂......

创建文件invisible.vbs

CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, True

然后在任务计划程序中,像这样调用你的脚本:

wscript.exe "C:\Batch Files\invisible.vbs" "C:\Batch Files\syncfiles.bat"

我测试了它,这确实有效:没有命令窗口,任务被认为是在批处理脚本结束之前运行。

信用转到https://superuser.com/a/62646/40362


对于2008 R2,使invisible.vbs具有此内容,并直接执行它。它会默默运行BAT并等待完成。

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "D:\IUpdateScript.bat", 0, true