Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I run a windows batch file but hide the command window?

How can I run a windows batch file but hiding the command window? I dont want cmd.exe to be visible on screen when the file is being executed. Is this possible?

like image 499
barfoon Avatar asked Sep 09 '10 14:09

barfoon


People also ask

How do I show or hide a command window?

To hide the command window: Type HideCommandWindow at the command prompt.

How do I run a bat file invisibly without displaying the command prompt window?

Solution-1:Create a VBScript file lets say Master. vbs and call your My. bat file within it. It'll run your batch file in invisible/hidden mode.


2 Answers

If you write an unmanaged program and use CreateProcess API then you should initialize lpStartupInfo parameter of the type STARTUPINFO so that wShowWindow field of the struct is SW_HIDE and not forget to use STARTF_USESHOWWINDOW flag in the dwFlags field of STARTUPINFO. Another method is to use CREATE_NO_WINDOW flag of dwCreationFlags parameter. The same trick work also with ShellExecute and ShellExecuteEx functions.

If you write a managed application you should follows advices from http://blogs.msdn.com/b/jmstall/archive/2006/09/28/createnowindow.aspx: initialize ProcessStartInfo with CreateNoWindow = true and UseShellExecute = false and then use as a parameter of . Exactly like in case of you can set property WindowStyle of ProcessStartInfo to ProcessWindowStyle.Hidden instead or together with CreateNoWindow = true.

You can use a VBS script which you start with wcsript.exe. Inside the script you can use CreateObject("WScript.Shell") and then Run with 0 as the second (intWindowStyle) parameter. See http://www.robvanderwoude.com/files/runnhide_vbs.txt as an example. I can continue with Kix, PowerShell and so on.

If you don't want to write any program you can use any existing utility like CMDOW /RUN /HID "c:\SomeDir\MyBatch.cmd", hstart /NOWINDOW /D=c:\scripts "c:\scripts\mybatch.bat", hstart /NOCONSOLE "batch_file_1.bat" which do exactly the same. I am sure that you will find much more such kind of free utilities.

In some scenario (for example starting from UNC path) it is important to set also a working directory to some local path (%SystemRoot%\system32 work always). This can be important for usage any from above listed variants of starting hidden batch.

like image 121
Oleg Avatar answered Oct 09 '22 04:10

Oleg


Using C# it's very easy to start a batch command without having a window open. Have a look at the following code example:

        Process process = new Process();         process.StartInfo.CreateNoWindow = true;         process.StartInfo.RedirectStandardOutput = true;         process.StartInfo.UseShellExecute = false;         process.StartInfo.FileName = "doSomeBatch.bat";         process.Start(); 
like image 38
BitKFu Avatar answered Oct 09 '22 04:10

BitKFu