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

问题描述 投票:0回答:11

目前我的批处理文件是这样的:

myprogram.exe param1

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

windows batch-file
11个回答
293
投票

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

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

注意开始后的双引号。


172
投票

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

start myProgram.exe param1
exit

54
投票

看START命令,可以这样做:

START rest-of-your-program-name

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

@echo off
notepad c:\test.txt

然而,这不会:

@echo off
start notepad c:\test.txt

34
投票

来自我的自己的问题

start /b myProgram.exe params...

如果您从现有的 DOS 会话启动程序,则有效。

如果没有,调用一个vb脚本

wscript.exe invis.vbs myProgram.exe %*

Windows Script Host 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

22
投票

当我尝试从批处理文件运行 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)

20
投票

你应该试试这个。它在没有窗口的情况下启动程序。它实际上闪烁了一秒钟,但很快就消失了。

start "name" /B myprogram.exe param1

16
投票

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

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

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

exit

7
投票

这个问题已经有很多答案了,但是我发布这个是为了强调一些重要的事情:

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

以上内容可能会在某些 Windows 版本中引起问题,因为

Start
实际上期望第一组引号是 Windows 标题。所以最好先双引号评论,或空白评论:

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

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

1
投票

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

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

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

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

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

准备好!看你喜不喜欢……

PS:最后两个引号之间可以插入程序参数;

PROGRAMNAME
字符串可以是文件名、相对路径或绝对路径——如果您输入绝对路径并删除驱动器号和分号,那么无论主机分配给什么字母,它都可以在拇指驱动器中使用它...(另外,如果您将快捷方式放在同一文件夹中,并在
PROGRAMNAME
中的程序文件名之前加上
%CD%
变量,路径将始终匹配;同样的技巧可以在
START IN
字段中使用)。


0
投票

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

打开

Task Scheduler

  • 开始 -> 运行/搜索 ->
    'cmd'
  • 类型
    taskschd.msc
    ->输入

在右侧,单击

Create Basic Task
并按照菜单进行操作。

希望这有帮助。


0
投票

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

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

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

将上面的行复制到编辑器并使用 .VBS 扩展名保存文件。

© www.soinside.com 2019 - 2024. All rights reserved.