Windows XP or later Windows: How can I run a batch file in the background with no window displayed?
I know I have already answered a similar question (Running Batch File in background when windows boots up), but this time I need to launch a batch:
- from another batch,
- without any console window displayed,
- with all arguments passed to the invisible batch.
The first batch is executed in a console window. However, I do not want the second batch (launched by the first in a asynchronous way) to also display a console window.
I have come up with a VBScript script which does just that, and I put the script as an answer for others to refer to, but if you have other ideas/solutions, feel free to contribute.
Note: The console window of Windows command processor is named not really correct DOS window by many people.
Thank you all for the answers. From what I understand, if I need to asynchronously call a script to run in an invisible mode:
- From a second script already in a console window,
start /b
is enough. - From Windows, without triggering a second window, my solution is still valid.
Solution 1:
Here is a possible solution:
From your first script, call your second script with the following line:
wscript.exe invis.vbs run.bat %*
Actually, you are calling a vbs script with:
- the [path]\name of your script
- all the other arguments needed by your script (
%*
)
Then, invis.vbs will call your script with the Windows Script Host Run() method, which takes:
- intWindowStyle : 0 means "invisible windows"
- bWaitOnReturn : false means your first script does not need to wait for your second script to finish
Here is invis.vbs:
set args = WScript.Arguments
num = args.Count
if num = 0 then
WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
WScript.Quit 1
end if
sargs = ""
if num > 1 then
sargs = " "
for k = 1 to num - 1
anArg = args.Item(k)
sargs = sargs & anArg & " "
next
end if
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
Solution 2:
Do you need the second batch file to run asynchronously? Typically one batch file runs another synchronously with the call
command, and the second one would share the first one's window.
You can use start /b
second.bat to launch a second batch file asynchronously from your first that shares your first one's window. If both batch files write to the console simultaneously, the output will be overlapped and probably indecipherable. Also, you'll want to put an exit
command at the end of your second batch file, or you'll be within a second cmd
shell once everything is done.
Solution 3:
Convert the batch file to an exe. Try Bat To Exe Converter or Online Bat To Exe Converter, and choose the option to run it as a ghost application, i.e. no window.