it-swarm.com.ru

Как свернуть командную строку из моего файла bat

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

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

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

35
Matt Elhotiby

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

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

55
izzekil

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

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

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

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

38
Cody Gray

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

15
Bruno Silva

Если вы хотите запустить пакет для Win-Run/autostart, я нашел отличное решение здесь https://www.computerhope.com/issues/ch000932.htm & https://superuser.com/ Вопросы/364799/Как запустить командную строку-сворачивать

cmd.exe /c start /min myfile.bat ^& exit
  • cmd.exe необходим, так как start - это не команда windows, которая может быть выполнена вне пакета
  • /c = выход после окончания запуска
  • часть ^& exit обеспечивает закрытие окна, даже если пакет не заканчивается на exit

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

3
Pedi T.

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

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

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

1
robert4

Если вы напечатаете этот текст в вашем файле bat:

start blah.exe /min

Он сразу же свернется, как только откроет программу. Вы увидите только краткую вспышку, и она исчезнет.

1
Kyroflash

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

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

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

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

1
Bernard Chen

Вы можете свернуть командную строку во время выполнения, но вам понадобятся два дополнительных сценария: 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
npocmaka

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

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

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

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

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

0
SSi

Я не знаю, есть ли способ свернуть окно из командной строки после его открытия, но в следующей статье предлагается порождать ваш фактический процесс в качестве дочернего элемента в новом, предварительно свернутом окне.

http://www.pcreview.co.uk/forums/command-Prompt-tool-minimize-command-window-after-starts-t2037434.html

0
Mr Griever

Вы можете попробовать запустить скрипт следующим образом

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

сохранить файл как filename.js

0
PatchedUp