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

前端 未结 10 1831
情深已故
情深已故 2020-11-30 01:40

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?

相关标签:
10条回答
  • 2020-11-30 02:19

    This little VBScript from technet does the trick:

    Const HIDDEN_WINDOW = 12
    
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set objStartup = objWMIService.Get("Win32_ProcessStartup")
    
    Set objConfig = objStartup.SpawnInstance_
    objConfig.ShowWindow = HIDDEN_WINDOW
    Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
    errReturn = objProcess.Create("mybatch.bat", null, objConfig, intProcessID)
    

    Edit mybatch.bat to your bat file name, save as a vbs, run it.

    Doc says it's not tested in Win7, but I just tested it, it works fine. Won't show any window for whatever process you run

    0 讨论(0)
  • 2020-11-30 02:23

    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.

    0 讨论(0)
  • 2020-11-30 02:25

    For any executable file, you can run your program using cmd with "c" parameter:

    cmd /c "your program address"\"YourFileName".bat  
    

    (->if it's a batch file!) As a final solution, I suggest that you create a .cmd file and put this command in it:

    cmd /c "your program address"\"YourFileName".bat
    exit
    

    Now just run this .cmd file.

    0 讨论(0)
  • 2020-11-30 02:26

    You could write a windows service that does nothing but execute your batch file. Since services run in their own desktop session, the command window won't be visible by the user.

    0 讨论(0)
  • 2020-11-30 02:26

    Create a shortcut to your bat file by using the right-click and selecting Create shortcut. Right-click on the shortcut you created and click on properties. Click on the Run drop-down box and select Minimized.

    0 讨论(0)
  • 2020-11-30 02:32

    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();
    
    0 讨论(0)
提交回复
热议问题