如何在程序启动后不打开控制台的情况下从批处理文件运行程序?

目前,我的批处理文件如下所示:

myprogram.exe param1

程序启动,但DOS窗口保持打开状态。我怎样才能关上它?

851490 次浏览

You can use the exit keyword. Here is an example from one of my batch files:

start myProgram.exe param1
exit

Look at the START command, you can do this:

START rest-of-your-program-name

For instance, this batch-file will wait until notepad exits:

@echo off
notepad c:\test.txt

However, this won't:

@echo off
start notepad c:\test.txt

You should try this. It starts the program with no window. It actually flashes up for a second but goes away fairly quickly.

start "name" /B myprogram.exe param1

From my own question:

start /b myProgram.exe params...

works if you start the program from an existing DOS session.

If not, call a vb script

wscript.exe invis.vbs myProgram.exe %*

The Windows Script Host Run() method 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

My solution to do this from the GUI:

  1. Create a shortcut to the program you want to run;

  2. Edit the shortcut's properties;

  3. Change the TARGET field to %COMSPEC% /C "START "" "PROGRAMNAME"";

  4. Change the RUN field to minimized.

Ready! See how you like it...

PS: Program parameters can be inserted in between the two final quotation marks; the PROGRAMNAME string can be either a filename, a relative or an absolute path -- if you put in an absolute path and erase the drive letter and semicolon, then this will work in a thumbdrive no matter what letter the host computer assigns to it... (also, if you place the shortcut in the same folder and precede the program filename in PROGRAMNAME with the %CD% variable, paths will always match; same trick can be used in START IN field).

This is the only thing that worked for me when I tried to run a java class from a batch file:

start "cmdWindowTitle" /B "javaw" -cp . testprojectpak.MainForm

You can customize the start command as you want for your project, by following the proper syntax:

Syntax
START "title" [/Dpath] [options] "command" [parameters]


Key:
title      : Text for the CMD window title bar (required)
path       : Starting directory
command    : The command, batch file or executable program to run
parameters : The parameters passed to the command


Options:
/MIN       : Minimized
/MAX       : Maximized
/WAIT      : Start application and wait for it to terminate
/LOW       : Use IDLE priority class
/NORMAL    : Use NORMAL priority class
/HIGH      : Use HIGH priority class
/REALTIME  : Use REALTIME priority class


/B         : Start application without creating a new window. In this case
^C will be ignored - leaving ^Break as the only way to
interrupt the application
/I         : Ignore any changes to the current environment.


Options for 16-bit WINDOWS programs only


/SEPARATE   Start in separate memory space (more robust)
/SHARED     Start in shared memory space (default)

Use the start command to prevent the batch file from waiting for the program. Just remember to put a empty double quote in front of the program you want to run after "Start". For example, if you want to run Visual Studio 2012 from a batch command:

Start ""  "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

notice the double quote after start.

If this batch file is something you want to run as scheduled or always; you can use windows schedule tool and it doesn't opens up in a window when it starts the batch file.

To open Task Scheduler:

  • Start -> Run/Search -> 'cmd'
  • Type taskschd.msc -> enter

From the right side, click Create Basic Task and follow the menus.

Hope this helps.

How to solve "space problem" and local dependencies:

@echo off
cd "C:\Program Files\HeidiSQL"
start heidisql.exe


cd "C:\Program Files (x86)\Google\Chrome\Application"
start chrome.exe


exit

Here is my preferred solution. It is taken from an answer to a similar question.

Use a VBS Script to call the batch file:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\path\to\your\batchfile.bat" & Chr(34), 0
Set WshShell = Nothing

Copy the lines above to an editor and save the file with .VBS extension.

Loads of answers for this question already, however I am posting this to highlight something important:

Start "C:\Program Files\someprog.exe"

Ghe above might cause issues in some windows versions as Start actually expects the first set of quotation marks to be a windows title. So it is best practice to first double quote a comment, or a blank comment:

Start "" "C:\Program Files\someprog.exe"

or

Start "Window Title" "C:\Program Files\someprog.exe"