【问题标题】:How do I minimize the command prompt from my bat file如何最小化我的 bat 文件中的命令提示符
【发布时间】:2012-03-03 04:32:59
【问题描述】:

我有这个 bat 文件,我想在运行时最小化 cmd 窗口:

@echo off
cd /d C:\leads\ssh 
call C:\Ruby192\bin\setrbvars.bat
ruby C:\leads\ssh\put_leads.rb

基本上我希望命令窗口立即最小化。关于如何做到这一点的任何想法?

【问题讨论】:

    标签: windows command-line batch-file cmd command-prompt


    【解决方案1】:

    有一种非常有趣的方法来最小化执行脚本,方法是让他重新启动自身最小化。这是放在脚本开头的代码:

    if not DEFINED IS_MINIMIZED set IS_MINIMIZED=1 && start "" /min "%~dpnx0" %* && exit
    ... script logic here ...
    exit
    

    工作原理

    当脚本正在执行时,IS_MINIMIZED 未定义 (if not DEFINED IS_MINIMIZED) 所以:

    1. IS_MINIMIZED 设置为 1set IS_MINIMIZED=1
    2. 脚本使用 start 命令启动自身的副本 && start "" /min "%~dpnx0" %* 其中:

      1. "" - 窗口的空标题。
      2. /min - 切换到最小化运行。
      3. "%~dpnx0" - 脚本的完整路径。
      4. %* - 传递所有脚本参数。
    3. 然后初始脚本完成它的工作:&& exit

    对于脚本变量IS_MINIMIZED的启动副本由原始脚本设置,因此它只是跳过第一行的执行并直接进入脚本逻辑。

    备注

    • 您必须保留一些变量名才能将其用作标志。
    • 脚本必须以exit结尾,否则脚本执行后不会关闭cmd窗口。
    • 如果您的脚本不接受参数,您可以使用参数作为标志而不是变量:

      if "%1" == "" start "" /min "%~dpnx0" MY_FLAG && exit 或更短 if "%1" == "" start "" /min "%~f0" MY_FLAG && exit

    【讨论】:

    • 添加 "not", eq, -> if not DEFINED
    • 感谢您注意到这一点。一个真正的错字!
    • 谢谢,很好!我想在用户登录时杀死一个进程,所以我在 Startup 文件夹中放了一个这样的 bat 而不是太打扰。
    • 我将它用于完全相同的目的 :) 我正在杀死一些在每次登录服务器时都会弹出的烦人服务,并且我无权将其从启动序列中清除。
    • 让我想起了 C 中的排斥守卫。我的第一年 CS 教授有一个项目向我们展示这些守卫的价值.....
    【解决方案2】:

    使用start 命令和/min 开关以最小化运行。例如:

    start /min C:\Ruby192\bin\setrbvars.bat
    

    由于您已将批处理文件指定为参数,因此会运行命令处理器,并传递 /k 开关。这意味着命令完成后窗口将保留在屏幕上。您可以通过自己显式运行 cmd.exe 并在必要时传递适当的开关来更改该行为。

    或者,您可以创建批处理文件的快捷方式(PIF 文件仍然存在),然后更改其属性以使其开始最小化。

    【讨论】:

    • 我试过了,它确实隐藏了 cmd 窗口,但它没有运行下一行 ruby​​ C:\leads\ssh\put_leads.rb
    • @Tamer:不,当然不是。它只运行指定为start 命令的参数的命令。将所有命令放入批处理文件中,或多次调用start
    • 不幸的是,我无法对计划任务执行此操作。计划任务似乎无法将“开始”识别为有效命令。
    • @macetw 把它放到另一个批处理文件中怎么样?
    【解决方案3】:

    我知道的唯一方法是创建批处理文件的 Windows 快捷方式,然后将其属性更改为默认最小化运行。

    【讨论】:

    • 比预期的要容易得多。
    • 我同意丹尼斯的评论。正如他们所说,'保持简单,山姆'。无需代码,无需出汗
    【解决方案4】:

    使用 PowerShell,您可以在不打开新实例的情况下从同一个文件中最小化。

    powershell -window minimized -command ""
    

    -window hidden-window normal 也可以完全隐藏或恢复。


    来源:https://stackoverflow.com/a/45061676/1178975

    【讨论】:

    • Powershell 引入了延迟。有什么让它更快的想法吗?
    【解决方案5】:

    如果你想为 Win-Run/autostart 启动批处理,我在这里找到了我很好的解决方案 https://www.computerhope.com/issues/ch000932.htm & https://superuser.com/questions/364799/how-to-run-the-command-prompt-minimized

    cmd.exe /c start /min myfile.bat ^& exit
    
    • 需要cmd.exe,因为 start 不是可以在批处理之外执行的 windows 命令
    • /c = 启动完成后退出
    • ^& exit 部分确保即使批处理不以exit 结束,窗口也会关闭

    但是,初始的 cmd 仍然没有最小化。

    【讨论】:

    • 唯一对我有用的方法是启动通过 Windows 任务计划程序最小化的批处理文件。
    • 正如@BusinessTomcat 所说,这是唯一一个似乎工作正常的。谢谢!!
    【解决方案6】:

    “最小化”cmd 窗口的一种方法是使用类似...的东西来减小控制台的大小

    echo DO NOT CLOSE THIS WINDOW
    MODE CON COLS=30 LINES=2
    

    如果您愿意,可以将 COLS 减少到 18 左右,将 LINES 减少到 1。 优点是它可以在 32 位或 64 位 WinPE 下工作,并且不需要任何 3rd 方实用程序。

    【讨论】:

      【解决方案7】:

      如果您在 bat 文件中键入此文本:

      start /min blah.exe
      

      一打开程序就会立即最小化。您只会看到它的短暂闪光,然后它就会消失。

      【讨论】:

      • 感谢您的贡献,但这与投票最高的答案相同。
      【解决方案8】:

      您可以尝试如下运行脚本

      var WindowStyle_Hidden = 0
      var objShell = WScript.CreateObject("WScript.Shell")
      var result = objShell.Run("cmd.exe /c setrbvars.bat", WindowStyle_Hidden)
      

      将文件另存为 filename.js

      【讨论】:

      • 请求是从 批处理文件 中隐藏命令提示符,而不是让 javascript 在其他地方运行而最终隐藏它。
      【解决方案9】:

      另一个能够在任何时候(不仅是在启动脚本时)最小化控制台窗口的免费第 3 方工具是带有 TWAPI 扩展的 Tcl:

      echo package require twapi;twapi::minimize_window [twapi::get_console_window] | tclkitsh -
      

      这里tclkitsh.exe 位于PATH 中,是可从sourceforge.net/projects/twapi/files/Tcl binaries/Tclkits with TWAPI/ 下载的tclkit-cli-*-twapi-*.exe 文件之一。我更喜欢它而不是 Bernard Chen's answer 中提到的更轻的 min.exe,因为我已经将 TWAPI 用于无数其他目的。

      【讨论】:

        【解决方案10】:

        您可以在运行期间最小化命令提示符,但您需要两个额外的脚本:windowModegetCmdPid.bat

        @echo off
        
        call getCmdPid
        call windowMode -pid %errorlevel% -mode minimized
        
        cd /d C:\leads\ssh 
        call C:\Ruby192\bin\setrbvars.bat
        ruby C:\leads\ssh\put_leads.rb
        

        【讨论】:

          【解决方案11】:

          一种选择是找到可以更改当前正在运行的控制台窗口的窗口状态并从批处理脚本中调用它的各种实用程序之一。

          您可以将它作为批处理脚本中的第一件事来运行。这里有两个这样的工具:

          min.exe http://www.paulsadowski.com/wsh/cmdprogs.htm

          命令行 http://www.commandline.co.uk/cmdow/index.html

          【讨论】:

          • 我通常喜欢使用nircmdc.exe 来处理这样的事情,但由于某种原因,当它是控制台窗口时它不会最小化活动窗口。但是,cmdow 效果很好! cmdow @ /min 是我如何做到的,@ 是如何指示您要定位活动窗口。 (我在 Windows 10 中。)
          【解决方案12】:

          另一个适合我的选择是使用 ConEmu,请参阅 http://conemu.github.io/en/ConEmuArgs.html

          "C:\Program Files\ConEmu\ConEmu64.exe" -min -run myfile.bat
          

          【讨论】:

            【解决方案13】:

            试试这些

            CONSOLESTATE /Min
            

            或:

            SETCONSOLE /minimize
            

            或:

            TITLE MinimizeMePlease
            FOR /F %%A IN ('CMDOW ˆ| FIND "MinimizeMePlease"') DO CMDOW %%A /MIN
            

            【讨论】:

              猜你喜欢
              • 2017-04-02
              • 2016-02-17
              • 1970-01-01
              • 2011-03-23
              • 2021-06-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多