How can I hide ms-dos window when running a .bat file?

后端 未结 4 1416
感情败类
感情败类 2021-01-18 07:48

I am running a .bat file for my script (Scheduled Tak (CronJob)) per minute. When it runs, windows command prompt appears for a fiction of time.

My batch code like

相关标签:
4条回答
  • 2021-01-18 08:23

    I know the post is old but here is my solution, AGerman from dostips helped me code this script, its very useful.

    @echo off &setlocal EnableExtensions DisableDelayedExpansion
    
    :: Change the working directory to the directory of the batch file.
    :: If the first passed argument was ~e~ (that is, the batch file was called from the VBScript)
    ::  then shift the parameters by one and continue at label :elevated
    cd /d "%~dp0"&if "%~1"=="~e~" (shift&goto :elevated)
    
    :: Assign the passed arguments to variable param.
    set "param=%*"
    
    :: NET SESSION fails if the batch code doesn't run with elevated permissions.
    ::  Assign variable __verb to "open" if the batch file runs elevated or to "runas" if it doesn't run elevated
    >nul 2>&1 net session &&(set "__verb=open")||(set "__verb=runas")
    
    :: Assign the name of the VBScript to variable vbs.
    :: Assign the full name of the batch file to variable me.
    :: Enable delayed variable expansion.
    set "vbs=%temp%\uac.vbs"&set "me=%~f0"&setlocal enabledelayedexpansion
    
    :: If arguments were passed, prepare them to be passed from within the VBScript by doubling the quotation marks.
    if defined param set "param=!param:"=""!"
    
    :: Write the VBScript. The ShellExecute method will run the batch file in a cmd.exe process where ~e~ will be passed as
    ::  first argument followed by the original arguments (saved in param). The UAC will be invoked if __verb was set to "runas".
    ::  Elsewise the UAC will not be invoked. For further information about the ShellExecute method see:
    ::  https://msdn.microsoft.com/en-us/library/windows/desktop/gg537745(v=vs.85).aspx
    >"!vbs!" echo CreateObject("Shell.Application").ShellExecute "!comspec!", "/c """"!me!"" ~e~ !param!""", "", "%__verb%", 0
    
    :: Run the VBScript in a cscript.exe process.
    :: Delete the VBScript file.
    :: Quit the batch execution.
    cscript //nologo "!vbs!"&del "!vbs!"&goto :eof
    
    :elevated
    ::~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    :: Do your elevated stuff here...
    
    0 讨论(0)
  • 2021-01-18 08:29

    Use a VBScript

    Set objShell = WScript.CreateObject("WScript.Shell")
    objShell.Run("C:\yourbatch.bat"), 0, True
    

    Run that which will run your batch file hidden.

    0 讨论(0)
  • 2021-01-18 08:29

    This VBScript creates a copy of your batch file in %Temp%, executes it silently and deletes it afterwards

    Dim fso
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Dim tempfolder
    
    Const TemporaryFolder = 2
    
    Dim WshShell, strCurDir
    
    Set WshShell = CreateObject("WScript.Shell")
    
    strCurDir    = WshShell.CurrentDirectory
    
    batch = "@ECHO OFF" & vbCrLf & _
            "C:\wamp\bin\php\php5.4.3\php.exe -f C:\wamp\www\tst\index.php"
    
    Set tempfolder = fso.GetSpecialFolder(TemporaryFolder)
    
    WshShell.CurrentDirectory = tempfolder
    
    i=1
    
    n=0
    
    While n <> 1
    
    If (fso.FileExists(i&".bat")) Then
    
      i = i + 1
    
    Else
      n = 1
    
    End If
    
    Wend
    
    Set File = fso.CreateTextFile(i&".bat",True)
    
    File.Write batch
    
    File.Close
    
    Dim batchfile
    
    batchfile = fso.GetAbsolutePathName(i&".bat")
    
    WshShell.CurrentDirectory = strCurDir
    
    WshShell.Run chr(34) & batchfile & Chr(34), 0, TRUE
    
    fso.DeleteFile batchfile
    
    0 讨论(0)
  • 2021-01-18 08:40

    I don't like VBScript solution.

    Download and copy nircmd.exe to your %systemroot%\system32 folder, then add this command to first line of your batch:

    nircmd.exe win hide ititle "cmd.exe"
    

    or make your batch title custom first with title command to avoid from hiding all cmd windows, like this:

    title MyBatch
    nircmd.exe win hide ititle "MyBatch"
    
    0 讨论(0)
提交回复
热议问题