Windows script - run silent but wait for completion / return right code

John Humphreys - w00te picture John Humphreys - w00te · Jul 26, 2012 · Viewed 24.5k times · Source

Here's my situation:

  • I have a BAT file that takes a long time to run (1minute to 70 minutes)
  • I schedule it with Windows scheduler to run every 10 minutes
  • If it schedules again while it is still running, nothing happens (this is good)

My problem is that I need my BAT to run silently, and it doesn't. So, I want to launch it with a Windows script like the following:

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

Unfortunately, when I schedule this script, it does the job but returns instantly, making Windows scheduler think the task is finished when in reality the BAT is just running off by itself somewhere.

Because of this, Windows will reschedule the job again 10 minutes later and make multiple run.

What I need:

Is there a way to tell the Windows script file to wait for the target of the .Run command to complete before progressing/exiting? Basically, I want it to act like I launched another thread and then called join on it, so it does the same thing the BAT would have, but without displaying the console window.

Other Solutions

Tell me any other way to get this BAT to execute silently (powershell commands, whatever) and I'll accept it as a solution as well. Just don't tell me to write a full on C++/C# appliation around it, that's overkill :)


Running: Windows Server 2008 R2

Answer

dbenham picture dbenham · Jul 26, 2012

I think all you need is TRUE for the optional 3rd argument

WshShell.Run chr(34) & "C:\Batch Files\syncfiles.bat" & Chr(34), 0, TRUE