Как свернуть командную строку из моего файла bat - PullRequest
35 голосов
/ 10 февраля 2012

У меня есть этот bat-файл, и я хочу свернуть окно cmd при его запуске:

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

По сути, я хочу, чтобы окно командной строки было свернуто немедленно.Есть идеи как это сделать?

Ответы [ 12 ]

57 голосов
/ 12 марта 2014

Существует довольно интересный способ минимизировать выполнение скрипта, заставляя его перезапускаться сам по себе. Вот код, который нужно поместить в начало вашего скрипта:

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 имеет значение 1 : set IS_MINIMIZED=1.
  2. Скрипт запускает свою копию, используя start command && 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

40 голосов
/ 10 февраля 2012

Используйте команду start, с переключателем /min, чтобы запуск был свернут. Например:

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

Поскольку вы указали командный файл в качестве аргумента, командный процессор запускается, передавая переключатель /k. Это означает, что окно останется на экране после завершения команды. Вы можете изменить это поведение, явно запустив cmd.exe самостоятельно и, при необходимости, передав соответствующие ключи.

В качестве альтернативы, вы можете создать ярлык для командного файла (файлы PIF все еще существуют), а затем изменить его свойства, чтобы он начал сворачиваться.

15 голосов
/ 10 февраля 2012

Единственный способ, которым я знаю, - это создать ярлык Windows для командного файла, а затем изменить его свойства для запуска по умолчанию свернутыми.

3 голосов
/ 11 апреля 2019

Используя PowerShell, вы можете свернуть этот же файл, не открывая новый экземпляр.

powershell -window minimized -command ""

Также -window hidden и -window normal доступны для полного скрытия или восстановления.


источник: https://stackoverflow.com/a/45061676/1178975

3 голосов
/ 11 мая 2017

Если вы хотите запустить пакет для 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, так как запуск - это не команда windows, которая может быть выполнена вне пакета
  • /c = выход после завершения старта
  • часть ^& exit обеспечивает закрытие окна, даже если партия не заканчивается на exit

Однако первоначальный cmd все еще не свернут.

1 голос
/ 06 марта 2017

Еще одним бесплатным сторонним инструментом, способным минимизировать окно консоли в любое время (не только при запуске сценария), является Tcl с расширением TWAPI:

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

здесь tclkitsh.exe находится в ПУТИ и является одним из tclkit-cli-*-twapi-*.exe файлов, загружаемых из sourceforge.net / projects / twapi / files / Tcl binaries / Tclkits с TWAPI / . Я предпочитаю это намного более легкому min.exe, упомянутому в ответе Бернарда Чена , потому что я уже использую TWAPI для бесчисленных других целей.

0 голосов
/ 01 января 2019

Один из способов «минимизировать» окно cmd - уменьшить размер консоли, используя что-то вроде ...

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

Вы можете уменьшить COLS до 18, а LINES до 1, если хотите. Преимущество заключается в том, что он работает под WinPE, 32-разрядной или 64-разрядной версией и не требует каких-либо сторонних утилит.

0 голосов
/ 11 мая 2017

Другой вариант, который мне подходит, - это использование ConEmu, см. http://conemu.github.io/en/ConEmuArgs.html

"C:\Program Files\ConEmu\ConEmu64.exe" -min -run myfile.bat
0 голосов
/ 09 марта 2017

Вы можете свернуть командную строку во время выполнения, но вам понадобятся два дополнительных сценария: windowMode и getCmdPid.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
0 голосов
/ 10 июня 2014

Один из вариантов - найти одну из различных утилит, которые могут изменить состояние окна запущенного в данный момент окна консоли, и вызвать его из пакетного сценария.

Вы можете запустить его первым делом в вашем пакетном скрипте. Вот два таких инструмента:

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

cmdow http://www.commandline.co.uk/cmdow/index.html

...