Пакетна програма запуску сценарію Windows та консоль виходу


90

У мене є пакетний сценарій, який я використовую для запуску програми, наприклад notepad.exe. Коли я двічі клацну на цьому командному файлі, блокнот запускається нормально, але чорне вікно того, cmdхто запускав, notepad.exeзалишається у фоновому режимі. Що мені потрібно зробити, щоб запустити notepad.exeі зникнути вікно cmd?

редагувати : складніше, ніж використовувати \I.

На cmdдзвінки cygwinі cygwinпочинається notepad. я використовую

start \I \path\cygwin\bin\bash.exe

і перше вікно (cmd) зникає, але друге вікно (\ cygwin \ bin \ bash.exe) все ще залишається на задньому плані. У сценарії cygwin, який я використав, notepad.exe &а потім виходжу.

Відповіді:


204
start "" "%SystemRoot%\Notepad.exe"

Зберігайте проміжки ""між початком та шляхом до вашої програми.


Додано пояснення:

Зазвичай, коли ми запускаємо програму з командного файлу, як показано нижче, у нас будуть чорні вікна на задньому плані, як сказав OP.

%SystemRoot%\Notepad.exe

Причиною цього став блокнот, запущений у тому ж командному рядку (процес). Командний рядок закриється ПІСЛЯ закриття блокнота. Щоб цього уникнути, ми можемо використовувати startкоманду, щоб запустити такий окремий процес.

start %SystemRoot%\Notepad.exe

Ця команда чудова, якщо вона не має місця на шляху. Щоб обробити простір у шляху на всякий випадок, ми додали такі "лапки.

start "%SystemRoot%\Notepad.exe"

Однак запуск цієї команди просто запустить інший пустий командний рядок. Чому? Якщо ви шукаєте в start /?, startкоманда розпізнає аргумент між "як заголовок нового командного рядка, який він збирається запустити. Отже, щоб вирішити це, ми маємо таку команду:

start "" "%SystemRoot%\Notepad.exe"

Перший аргумент - ""це встановити заголовок (який ми встановлюємо як порожній), а другий аргумент "%SystemRoot%\Notepad.exe"- це цільова команда для запуску (яка підтримує пробіли у шляху).

Якщо вам потрібно додати параметри до команди, просто додайте їх у лапки, тобто:

start "" "%SystemRoot%\Notepad.exe" "<filename>" 

12
Примітка: коли ви хочете запустити файл jar Java таким чином, переконайтеся, що використовуєте javawвиконуваний файл (а не просто java, тому що javaзапуститься інше пакетне вікно): напр.start "" "javaw" -jar C:\JavaProject\myApp.jar
TmTron

@checksum Будь ласка, ви також можете розширити свій приклад того, як перенаправити стандартну помилку та стандартний вивід запущеної програми?
Морська зірка

@Starfish Я думаю, що блокнот не має stdout та stderr. Але для вашого запитання це було б щось на зразок application.exe > stdout.txt 2>stderr.txt. Додавання вашого запитання до вищезазначеної відповіді буде відхилятися від запитання оригінального автора. Можливо, ви можете розпочати нове запитання, щоб задати його більш детально.
контрольна сума

1
Зовсім безглузде рішення. Windows знову виграє.
Ярослав Рахматуллін

9

Використовуйте start notepad.exe.

Більше інформації з start /?.


1
І саме який аргумент? /B? Я прочитав його, але якщо я використовую start /B notepad.exeвікно cmd, воно не зникає.
Посса

Гаразд, це складніше, ніж використання \I. Виклик cmd cygwin та cygwin запускають блокнот. Я використовую, start \I cygwinі перше вікно зникає, але друге вікно все ще знаходиться на задньому плані. У сценарії cygwin, який я використовував, notepad.exe &а потімexit
Посса

cygstart запускає блокнот, але консоль залишається у фоновому режимі.
Посса

5

Найпростіший спосіб - це просто почати start

start notepad.exe

Тут ви можете знайти більше інформації проstart


4

%ComSpec% /c %systemroot%\notepad.exe


це не закриває вікно cmd%ComSpec% /c emacs.exe "-rv" "--no-splash"
jcubic

0

Хм ... я роблю це в одному зі своїх командних файлів, як це, без використання CALL або START:

%SystemRoot%\notepad.exe ..\%URI%
GOTO ENDF

У мене не встановлено Cygwin, і я працюю в Windows XP.


Отримала помилку "The system cannot find the batch label specified - ENDF"в Windows 10
jcubic

0
start "" ExeToExecute

для мене не працює у випадку Xilinx xsdk, оскільки, як зазначає @jeb у коментарях нижче, це фактично файл bat.

так що те, що не працює фактично, це

start "" BatToExecute

Я намагаюся відкрити xsdk так, і він відкриває окремий cmd, який потрібно закрити, і xsdk може працювати самостійно

Перед запуском xsdk я запускаю (джерело) Env / Paths (з settings64.bat ), щоб команда xsdk.bat була розпізнана (просто як xsdk, з .bat )

що працює з .bat

call BatToExecute

2
Це, мабуть, відповідає на питання, але не це. Питання полягає в запуску файлу .exe ( notepad.exe) з його від’єднанням від cmd.exe. Ви відповідаєте, як запустити файл .bat у тому ж екземплярі
jeb

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