Как запустить программу из командного файла, не оставляя консоль открытой после запуска программы?

184

На данный момент мой командный файл выглядит так:

myprogram.exe param1

Программа запускается, но окно DOS остается открытым. Как я могу закрыть это?

Мистер Дев
источник
3
Вам, вероятно, следует изменить принятый ответ на тот, который опубликовал Маршалл.
Откр. 1

Ответы:

163

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

start myProgram.exe param1
exit
Патрик Дежарден
источник
18
Обратите внимание, что это не очень удобно, если вы используете консоль в интерактивном режиме, вместо того, чтобы просто дважды щелкнуть командный файл. Как правило, exitв пакетный файл практически нет необходимости .
Джои
27
Я попробовал эту команду в Win8. Я не уверен, что это не так, но учтите, что вы должны указать заголовок окна в качестве первого параметра. Когда я запускал его так, как описывал Патрик, он просто открывал новую командную строку с «myProgram.exe» в качестве заголовка окна:start "VPN" "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe"
Адам Плохер
9
Обратите внимание, что если ваша команда содержит пробелы и вы помещаете ее в кавычки, перед ней необходимо добавить дополнительный параметр в кавычках, так как START интерпретирует первый параметр в кавычках как имя окна и только следующий второй параметр как имя команды.
Давид
259

Используйте команду запуска, чтобы предотвратить ожидание программы командным файлом. Просто не забудьте поставить пустую двойную кавычку перед программой, которую вы хотите запустить после «Пуск». Например, если вы хотите запустить Visual Studio 2012 из пакетной команды:

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

обратите внимание на двойную кавычку после запуска.

Маршалл
источник
55
@SharkAlley Правильный форматstart <window name> <program name>
Kruug
5
Это правильный ответ. Спасибо, пустые двойные кавычки - это как раз то, что мне нужно.
Ричард
У меня есть сценарий резервного копирования, который я запускаю еженедельно, и меняю его чуть-чуть каждую неделю, пытаясь заставить его а) закрыть свою программу, б) сделать резервную копию моих данных и в) перезапустить программу и закрыть командную строку. Это наконец заставило командную строку закрыться (также препятствовало запуску следующей резервной копии, мне пришлось закрыть эту командную строку !!!).
NobleUplift
@NobleUplift: Для меня это сработало, ниже приведена точная строка: «Пуск» «» C: \ Program Files (x86) \ JetBrains \ IntelliJ IDEA 2016.2.5 \ bin \ idea64.exe "&
Xinus
53

Посмотрите на команду СТАРТ, вы можете сделать это:

START rest-of-your-program-name

Например, этот пакетный файл будет ожидать выхода из блокнота:

@echo off
notepad c:\test.txt

Тем не менее, это не будет:

@echo off
start notepad c:\test.txt
Лассе В. Карлсен
источник
31

Из моего собственного вопроса :

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
VonC
источник
1
+1 Должен быть более простой способ, но это единственный ответ, который сработал для меня.
DN
Спасибо - этот флаг / b был именно тем, что я искал.
ар
21

Это единственное, что сработало для меня, когда я попытался запустить класс 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)
Зосима
источник
18

Вы должны попробовать это. Запускает программу без окна. На самом деле он мигает на секунду, но уходит довольно быстро.

start "name" /B myprogram.exe param1
Крис Дейл
источник
4
"title"Вариант имеет важное значение. Если путь к программе содержит пробелы, он должен быть заключен в кавычки, поэтому мы должны добавить, "title"чтобы избежать сбоя.
AD
1
Если вы закроете главное окно, фоновый процесс myprogram.exe также закроется.
Адитья Гупта
14

Как решить «космическую проблему» и локальные зависимости:

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

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

exit
Gilco
источник
Это не ответ на вопрос
Джеб
2
правда, но я думаю, что это дает хорошее решение, которое решает и другие проблемы, которые у меня были.
Джилко
2
Было решение для меня. Окно Dos открывается, но закрывается снова, и решение работает. Я не понимаю отрицательных голосов (я проголосовал)
JoeFox
Я тоже. решение работает, и решить проблему
Gilco
2

Множество ответов на этот вопрос уже есть, но я публикую это, чтобы прояснить что-то важное, хотя это не всегда так:

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

Может вызывать проблемы в некоторых версиях Windows, так как Startфактически ожидает, что первый набор кавычек будет заголовком Windows. Поэтому рекомендуется сначала заключить в двойную кавычку комментарий или пустой комментарий:

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

или

Start "Window Title" "C:\Program Files\someprog.exe"
Gerhard
источник
0

Мое решение сделать это из графического интерфейса:

  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и следуйте меню.

Надеюсь это поможет.

Leustad
источник
0

Вот мое предпочтительное решение. Это взято из ответа на аналогичный вопрос.

Используйте VBS Script для вызова командного файла:

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

Скопируйте строки выше в редактор и сохраните файл с расширением .VBS.

Ильич
источник