Як запустити програму з пакетного файлу, не залишаючи консоль відкритою після запуску програми?


184

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

myprogram.exe param1

Програма запускається, але вікно DOS залишається відкритим. Як я можу його закрити?


3
Напевно, ви повинні змінити прийняту відповідь на ту, яку розмістив Маршалл.
Rev1.0

Відповіді:


163

Можна використовувати ключове слово вихід. Ось приклад одного з моїх пакетних файлів:

start myProgram.exe param1
exit

18
Зауважте, що це не буде приємно, якщо ви використовуєте консоль інтерактивно, а не двічі клацніть на пакетному файлі. Як правило, майже ніколи не потрібно ставити exitв пакетний файл.
Джої

27
Я спробував цю команду в Win8. Я не впевнений, чи це інше, але зауважте, що ви повинні надати йому назву Window як перший параметр. Коли я запустив би його так, як описав Патрік, він просто відкриє нову командну команду з "myProgram.exe" як заголовок вікна:start "VPN" "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe"
Адам Плочер

9
Зауважте, що якщо ваша команда містить пробіли, і ви вводите їх у лапки, перед цим потрібно додати додатковий цитований параметр, оскільки START інтерпретує перший цитований параметр як ім'я вікна, а лише наступний другий параметр як ім'я команди.
Девід Балажич

259

Використовуйте команду start, щоб не допустити, щоб пакетний файл чекав програми. Просто не забудьте поставити порожню подвійну цитату перед програмою, яку потрібно запустити після "Пуску". Наприклад, якщо ви хочете запустити Visual Studio 2012 з пакетної команди:

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

помічайте подвійну цитату після початку.


55
@SharkAlley Правильний форматstart <window name> <program name>
Круг

5
Це правильна відповідь. Дякую, порожні подвійні цитати - це саме те, що мені було потрібно.
Річард

У мене є сценарій резервного копіювання, який я запускаю щотижня і можу змінювати його щоразу так незначно, намагаючись довести його до а) закрити свою програму, б) створити резервну копію даних і в) перезапустити програму та закрити командний рядок. Це нарешті отримало командний рядок, щоб закрити (також завадило запустити мою наступну резервну копію, я повинен був закрити цей командний рядок !!!).
NobleUplift

@NobleUplift: Для мене це спрацювало, .. нижче - точний рядок, Почніть "" "C: \ програмні файли (x86) \ JetBrains \ IntelliJ IDEA 2016.2.5 \ bin \ idea64.exe" &
Xinus

53

Подивіться на команду START, ви можете це зробити:

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 () займає:

  • 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
+1 Має бути простіший спосіб, але це єдина відповідь, яка працювала на мене.
ДН

Дякую - той / б прапор був саме тим, що я шукав.
ар

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

Це не відповідь на питання
jeb

2
правда, але я думаю, що це дає гарне рішення, яке вирішує й інші проблеми, які у мене були.
Гілько

2
Було рішення для мене. Відкриється вікно Dos, але знову закривається, і рішення працює. Я не розумію низових подій (я схвалив)
JoeFox

Я також. рішення працює, і вирішити проблему
Гілько

2

Відповіді на це питання вже є, але я публікую це, щоб уточнити щось важливе, хоча це не завжди може бути так:

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

Може Startвиникнути проблеми в деяких версіях Windows, оскільки насправді очікує, що перший набір лапок буде назвою Windows. Тому найкраще спочатку подвоїти коментар або пустий коментар:

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

або

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

0

Моє рішення зробити це з GUI:

  1. Створіть ярлик до програми, яку потрібно запустити;

  2. Відредагуйте властивості ярлика;

  3. Змінити TARGETполе на %COMSPEC% /C "START "" "PROGRAMNAME"";

  4. Змініть RUNполе до мінімізації.

Готово! Подивіться, як вам це подобається ...

PS: Параметри програми можна вставити між двома кінцевими лапками; PROGRAMNAMEрядок може бути або ім'я файлу, відносний або абсолютний шлях - якщо поставити абсолютний шлях і стерти букву і точку з коми, то це буде працювати в флешці , незалежно від того , що лист хост - комп'ютер присвоює йому .. . (також, якщо ви помістите ярлик у ту саму папку і передуєте назві файла програми PROGRAMNAMEзі %CD%змінною, шляхи завжди будуть відповідати; в START INполі може бути використаний такий самий трюк ).


0

Якщо цей пакетний файл - це те, що ви хочете запустити як заплановано або завжди; ви можете використовувати інструмент розкладу Windows, і він не відкриється у вікні, коли він запускає пакетний файл.

Щоб відкрити Task Scheduler:

  • Початок -> Запуск / Пошук -> 'cmd'
  • Введіть taskschd.msc-> enter

Праворуч натисніть Create Basic Taskі слідуйте за меню.

Сподіваюся, це допомагає.


0

Ось моє переважне рішення. Це взято з відповіді на подібне запитання.

Використовуйте сценарій VBS для виклику пакетного файлу:

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

Скопіюйте рядки вище в редактор і збережіть файл із розширенням .VBS.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.