How to call CMD without opening a window

后端 未结 7 666
被撕碎了的回忆
被撕碎了的回忆 2021-01-03 20:18

I\'ve an C++ method (using Visual Studio, if it helps) that calls to cmd like this:

start \\B example.exe arg1 arg2 arg3

The problem is tha

相关标签:
7条回答
  • 2021-01-03 20:57

    Just call it without start:

    example.exe arg1 arg2 arg3
    
    0 讨论(0)
  • 2021-01-03 21:04

    How about using WSH instead of a CMD Prompt?

    You can use the .Run <command>, 0 to hide the window like:

    Set objShell = WScript.CreateObject("WScript.Shell")
    isHidden = 0 'change 0 to 1 to show the CMD prompt
    objShell.Run "%comspec% /c myfile.bat", isHidden
    
    0 讨论(0)
  • 2021-01-03 21:10

    To run a cmd file and exit, use:

    cmd.exe /c call file.cmd ...parameters...

    0 讨论(0)
  • 2021-01-03 21:11

    You can use the /C /Q switch

    cmd.exe /c /q dir/b
    

    this will run the dir/b command and exit no window will be shown since we are settng the ECHO off with the /q, but if you want to see the output before it closes then don't use the /q switch as

    cmd.exe /c dir/b
    

    The above two examples will be too quick to execute so please try with this

    cmd /c  dir/b/s
    
    cmd /c /q dir/b/s
    

    Since the dir /b /s will run through each sub-directory you can see it working.

    In case you want to run the command with no window still want to get the output then pipe the clip command with it.

    cmd /c dir/b|clip
    

    This will copy the output of the command in the clipboard and that you can paste ti elsewhere, if the clipboard is not overwritten.

    This has been tested in Windows 7 with Microsoft Windows [Version 6.1.7601] it might differ with other systems

    For more information on cmd.exe just type cmd /? in the prompt to get the following:

    Starts a new instance of the Windows command interpreter
    
    CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
        [[/S] [/C | /K] string]
    
    /C      Carries out the command specified by string and then terminates
    /K      Carries out the command specified by string but remains
    /S      Modifies the treatment of string after /C or /K (see below)
    /Q      Turns echo off
    /D      Disable execution of AutoRun commands from registry (see below)
    /A      Causes the output of internal commands to a pipe or file to be ANSI
    /U      Causes the output of internal commands to a pipe or file to be
            Unicode
    /T:fg   Sets the foreground/background colors (see COLOR /? for more info)
    /E:ON   Enable command extensions (see below)
    /E:OFF  Disable command extensions (see below)
    /F:ON   Enable file and directory name completion characters (see below)
    /F:OFF  Disable file and directory name completion characters (see below)
    /V:ON   Enable delayed environment variable expansion using ! as the
            delimiter. For example, /V:ON would allow !var! to expand the
            variable var at execution time.  The var syntax expands variables
            at input time, which is quite a different thing when inside of a FOR
            loop.
    /V:OFF  Disable delayed environment expansion.
    
    Note that multiple commands separated by the command separator '&&'
    are accepted for string if surrounded by quotes.  Also, for compatibility
    reasons, /X is the same as /E:ON, /Y is the same as /E:OFF and /R is the
    same as /C.  Any other switches are ignored.
    
    If /C or /K is specified, then the remainder of the command line after
    the switch is processed as a command line, where the following logic is
    used to process quote (") characters:
    
        1.  If all of the following conditions are met, then quote characters
            on the command line are preserved:
    
            - no /S switch
            - exactly two quote characters
            - no special characters between the two quote characters,
              where special is one of: &<>()@^|
            - there are one or more whitespace characters between the
              two quote characters
            - the string between the two quote characters is the name
              of an executable file.
    
        2.  Otherwise, old behavior is to see if the first character is
            a quote character and if so, strip the leading character and
            remove the last quote character on the command line, preserving
            any text after the last quote character.
    
    If /D was NOT specified on the command line, then when CMD.EXE starts, it
    looks for the following REG_SZ/REG_EXPAND_SZ registry variables, and if
    either or both are present, they are executed first.
    
        HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
    
            and/or
    
        HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
    
    Command Extensions are enabled by default.  You may also disable
    extensions for a particular invocation by using the /E:OFF switch.  You
    can enable or disable extensions for all invocations of CMD.EXE on a
    machine and/or user logon session by setting either or both of the
    following REG_DWORD values in the registry using REGEDIT.EXE:
    
        HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions
    
            and/or
    
        HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions
    
    to either 0x1 or 0x0.  The user specific setting takes precedence over
    the machine setting.  The command line switches take precedence over the
    registry settings.
    
    In a batch file, the SETLOCAL ENABLEEXTENSIONS or DISABLEEXTENSIONS arguments
    takes precedence over the /E:ON or /E:OFF switch. See SETLOCAL /? for details.
    
    The command extensions involve changes and/or additions to the following
    commands:
    
        DEL or ERASE
        COLOR
        CD or CHDIR
        MD or MKDIR
        PROMPT
        PUSHD
        POPD
        SET
        SETLOCAL
        ENDLOCAL
        IF
        FOR
        CALL
        SHIFT
        GOTO
        START (also includes changes to external command invocation)
        ASSOC
        FTYPE
    
    To get specific details, type commandname /? to view the specifics.
    
    Delayed environment variable expansion is NOT enabled by default.  You
    can enable or disable delayed environment variable expansion for a
    particular invocation of CMD.EXE with the /V:ON or /V:OFF switch.  You
    can enable or disable delayed expansion for all invocations of CMD.EXE on a
    machine and/or user logon session by setting either or both of the
    following REG_DWORD values in the registry using REGEDIT.EXE:
    
        HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion
    
            and/or
    
        HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion
    
    to either 0x1 or 0x0.  The user specific setting takes precedence over
    the machine setting.  The command line switches take precedence over the
    registry settings.
    
    In a batch file the SETLOCAL ENABLEDELAYEDEXPANSION or DISABLEDELAYEDEXPANSION
    arguments takes precedence over the /V:ON or /V:OFF switch. See SETLOCAL /?
    for details.
    
    If delayed environment variable expansion is enabled, then the exclamation
    character can be used to substitute the value of an environment variable
    at execution time.
    
    You can enable or disable file name completion for a particular
    invocation of CMD.EXE with the /F:ON or /F:OFF switch.  You can enable
    or disable completion for all invocations of CMD.EXE on a machine and/or
    user logon session by setting either or both of the following REG_DWORD
    values in the registry using REGEDIT.EXE:
    
        HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
        HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar
    
            and/or
    
        HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
        HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar
    
    with the hex value of a control character to use for a particular
    function (e.g.  0x4 is Ctrl-D and 0x6 is Ctrl-F).  The user specific
    settings take precedence over the machine settings.  The command line
    switches take precedence over the registry settings.
    
    If completion is enabled with the /F:ON switch, the two control
    characters used are Ctrl-D for directory name completion and Ctrl-F for
    file name completion.  To disable a particular completion character in
    the registry, use the value for space (0x20) as it is not a valid
    control character.
    
    Completion is invoked when you type either of the two control
    characters.  The completion function takes the path string to the left
    of the cursor appends a wild card character to it if none is already
    present and builds up a list of paths that match.  It then displays the
    first matching path.  If no paths match, it just beeps and leaves the
    display alone.  Thereafter, repeated pressing of the same control
    character will cycle through the list of matching paths.  Pressing the
    Shift key with the control character will move through the list
    backwards.  If you edit the line in any way and press the control
    character again, the saved list of matching paths is discarded and a new
    one generated.  The same occurs if you switch between file and directory
    name completion.  The only difference between the two control characters
    is the file completion character matches both file and directory names,
    while the directory completion character only matches directory names.
    If file completion is used on any of the built in directory commands
    (CD, MD or RD) then directory completion is assumed.
    
    The completion code deals correctly with file names that contain spaces
    or other special characters by placing quotes around the matching path.
    Also, if you back up, then invoke completion from within a line, the
    text to the right of the cursor at the point completion was invoked is
    discarded.
    
    The special characters that require quotes are:
         <space>
         &()[]{}^=;!'+,`~
    
    
    0 讨论(0)
  • 2021-01-03 21:14

    I dont know how to do it in C++ but to open a new command prompt window that is also minimized (or "hidden") using a batch file i would use:

    start /min cmd
    

    Or if you start the command prompt you can type:

    @echo off
    cls && start /b cmd
    

    This restarts the current command prompt window with out closing it, however all previously set environment variables are reset. Hope this helps!

    (PS. This was tested and was successful on Windows 7 Ultimate OS)

    0 讨论(0)
  • 2021-01-03 21:15

    Try ShellExecuteEx, setting nShow=SW_HIDE.

    0 讨论(0)
提交回复
热议问题