如何从批处理文件运行程序,而无需在程序启动后打开控制台?


184

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

myprogram.exe param1

程序启动,但DOS窗口保持打开状态。我该如何关闭?


3
您可能应该将接受的答案更改为Marshall发布的答案。
Rev1.0

Answers:


163

您可以使用exit关键字。这是我的批处理文件之一的示例:

start myProgram.exe param1
exit

18
请注意,如果您以交互方式使用控制台而不是双击批处理文件,这将不是一件好事。通常,几乎没有必要将其exit放入批处理文件中。
乔伊(Joey)

27
我在Win8中尝试了此命令。我不确定是否有所不同,但是请注意,您必须为它提供一个Window标题作为第一个参数。当我按照帕特里克(Patrick)描述的方式运行它时,它将以“ myProgram.exe”作为窗口标题打开一个新命令提示符:start "VPN" "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe"
Adam Plocher 2013年

9
请注意,如果您的命令包含空格并将其用引号引起来,则必须在其前面添加一个额外的带引号的参数,因为START会将第一个带引号的参数解释为窗口名称,而将以下的第二个参数解释为命令名称。
DavidBalažic17年

257

使用start命令来防止批处理文件等待程序。只需记住在“启动”之后要运行的程序前面加一个空的双引号即可。例如,如果要从批处理命令运行Visual Studio 2012:

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

注意启动后的双引号。


55
@SharkAlley正确的格式是start <window name> <program name>
Kruug

5
这是正确的答案。谢谢,空双引号正是我所需要的。
理查德(Richard)

我有一个每周运行的备份脚本,每周都会稍做修改,以使其达到以下目的:a)关闭程序,b)备份数据,c)重新启动程序并关闭命令提示符。最终,该命令提示符关闭(也阻止了我的下一个备份触发,我不得不关闭该命令提示符!!!)。
NobleUplift '16

@NobleUplift:对我来说这是有效的..下面是确切的行,开始“”“ C:\ Program Files(x86)\ JetBrains \ IntelliJ IDEA 2016.2.5 \ bin \ idea64.exe”&
Xinus

53

查看START命令,您可以执行以下操作:

START rest-of-your-program-name

例如,此批处理文件将等到记事本退出:

@echo off
notepad c:\test.txt

但是,这不会:

@echo off
start notepad c:\test.txt

31

从我自己的问题

start /b myProgram.exe params...

如果您从现有的DOS会话中启动程序,则可以使用。

如果没有,请调用vb脚本

wscript.exe invis.vbs myProgram.exe %*

Windows脚本宿主Run()方法需要:

  • intWindowStyle:0表示“不可见窗口”
  • bWaitOnReturn:false表示您的第一个脚本不需要等待第二个脚本完成

这是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

1
+1肯定有一种更简单的方法,但这是唯一对我有用的答案。
DN

谢谢-/ b标志正是我想要的。
2014年

21

这是我尝试从批处理文件运行Java类时唯一对我有用的东西:

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

您可以start按照适当的语法为项目自定义命令:

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)

18

您应该尝试一下。它没有窗口启动程序。它实际上会闪烁一秒钟,但很快就会消失。

start "name" /B myprogram.exe param1

4
"title"选项很重要。如果程序的路径包含空格,则必须用引号将其括起来,因此我们必须添加"title"以避免错误。

1
如果关闭主窗口,则后台进程“ myprogram.exe”也将关闭。
Aditya Gupta,

14

如何解决“空间问题”和本地依赖性:

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

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

exit

这不是问题的答案
jeb

2
是的,但是我认为它提供了一个很好的解决方案,可以解决我遇到的其他问题。
吉尔科

2
是我的解决方案。“ Dos”窗口打开,但再次关闭,解决方案起作用。我不了解下降的投票(我已经投票)
JoeFox

我也是。解决方案有效,并解决了问题
Gilco

2

已经有很多关于这个问题的答案,但是我发布这个是为了澄清一些重要的事情,尽管可能并非总是这样:

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

在某些Windows版本中可能会引起问题,因为Start实际上希望第一组引号是Windows标题。因此,最好的做法是先用双引号将注释或空白注释:

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

要么

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

0

我从GUI执行此操作的解决方案:

  1. 创建要运行的程序的快捷方式;

  2. 编辑快捷方式的属性;

  3. 将该TARGET字段更改为%COMSPEC% /C "START "" "PROGRAMNAME"";

  4. 将该RUN字段更改为最小化。

准备!看看你喜欢吗...

PS:程序参数可以插入两个最终引号之间;该PROGRAMNAME字符串可以是文件名,也可以是相对路径,也可以是绝对路径。如果您输入绝对路径并擦除驱动器号和分号,则无论主机分配给它的字母是什么,它都可以用在thumbdrive中。 (同样,如果将快捷方式放置在同一文件夹中,并在程序文件名前PROGRAMNAME%CD%变量,路径将始终匹配;可以在START IN字段中使用相同的技巧)。


0

如果该批处理文件是您希望按计划或始终运行的文件;您可以使用Windows计划工具,启动批处理文件时它不会在窗口中打开。

打开 Task Scheduler

  • 开始->运行/搜索-> 'cmd'
  • 键入taskschd.msc- >进入

在右侧,单击 Create Basic Task并遵循菜单。

希望这可以帮助。


0

这是我的首选解决方案。它取自答案到类似的问题。

使用VBS脚本调用批处理文件:

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

将以上各行复制到编辑器中,并以.VBS扩展名保存文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.