【问题标题】:How can I run a program from a batch file without leaving the console open after the program starts?如何在程序启动后在不打开控制台的情况下从批处理文件运行程序?
【发布时间】:2010-09-24 09:12:37
【问题描述】:

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

myprogram.exe param1

程序启动,但 DOS 窗口仍然打开。如何关闭它?

【问题讨论】:

  • 您可能应该将接受的答案更改为 Marshall 发布的答案。

标签: windows batch-file


【解决方案1】:

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

start myProgram.exe param1
exit

【讨论】:

  • 请注意,如果您以交互方式使用控制台而不是仅仅双击批处理文件,这将不是一件好事。通常几乎不需要将exit 放入批处理文件中。
  • 我在 Win8 中试过这个命令。我不确定它是否不同,但请注意,您必须为其提供 Window 标题作为您的第一个参数。当我按照 Patrick 描述的方式运行它时,它只会打开一个新的命令提示符,窗口标题为“myProgram.exe”:start "VPN" "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe"
  • 请注意,如果您的命令包含空格并将其放在引号中,则必须在其前面添加一个额外的带引号的参数,因为 START 将第一个带引号的参数解释为窗口名称,并且仅将以下第二个参数解释为命令名字。
【解决方案2】:

看START命令,可以这样操作:

START rest-of-your-program-name

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

@echo off
notepad c:\test.txt

但是,这不会:

@echo off
start notepad c:\test.txt

【讨论】:

    【解决方案3】:

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

    start "name" /B myprogram.exe param1
    

    【讨论】:

    • "title" 选项很重要。如果程序路径包含空格,则必须用引号括起来,因此我们必须添加"title" 以避免失败。
    • 如果关闭主窗口,后台进程“myprogram.exe”也会关闭。
    【解决方案4】:

    来自我的own question

    start /b myProgram.exe params...
    

    如果您从现有的 DOS 会话启动程序,则可以工作。

    如果没有,调用vb脚本

    wscript.exe invis.vbs myProgram.exe %*
    

    Windows Script Host Run() method 需要:

    • 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 肯定有更简单的方法,但这是唯一对我有用的答案。
    • 谢谢 - /b 标志正是我想要的。
    【解决方案5】:

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

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

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

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

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

    准备好了!看看你喜欢它...

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

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

        注意开始后的双引号。

        【讨论】:

        • @SharkAlley 正确的格式是start &lt;window name&gt; &lt;program name&gt;
        • 这是正确答案。谢谢,空的双引号正是我所需要的。
        • 我有一个备份脚本,我每周运行一次,每周都会稍微修改它,试图让它 a) 关闭我的程序,b) 备份我的数据,c) 重新启动程序并关闭命令提示符。这终于让命令提示符关闭(也阻止了我的下一次备份触发,我不得不关闭该命令提示符!!!)。
        • @NobleUplift:对我来说这行得通,.. 下面是确切的行, Start "" "C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.2.5\bin\idea64.exe " &
        【解决方案8】:

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

        打开Task Scheduler:

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

        从右侧点击Create Basic Task 并按照菜单进行操作。

        希望这会有所帮助。

        【讨论】:

          【解决方案9】:

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

          @echo off
          cd "C:\Program Files\HeidiSQL"
          start heidisql.exe
          
          cd "C:\Program Files (x86)\Google\Chrome\Application"
          start chrome.exe
          
          exit
          

          【讨论】:

          • 这不是问题的答案
          • 是的,但我认为它提供了一个很好的解决方案,可以解决我遇到的其他问题。
          • 是我的解决方案。 Dos 窗口打开但又关闭,解决方案有效。我不明白反对票(我赞成)
          • 我要么。解决方案有效,并解决问题
          【解决方案10】:

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

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

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

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

          【讨论】:

            【解决方案11】:

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

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

            在某些 Windows 版本中可能会导致问题,因为 Start 实际上期望第一组引号是 Windows 标题。因此,最佳做法是先对评论或空白评论进行双引号:

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

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

            【讨论】:

            • 这让我很开心。现在它实际上可以工作了,否则它只会在尝试使用 exe 打开文件时给我打开方式对话框。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-24
            • 1970-01-01
            相关资源
            最近更新 更多