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

90

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

edit : сложнее, чем использовать \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
примечание: когда вы хотите запустить java-файл jar таким образом, убедитесь, что используете javawисполняемый файл (не только javaпотому, что javaзапустит другое пакетное окно): напримерstart "" "javaw" -jar C:\JavaProject\myApp.jar
TmTron
@checksum Не могли бы вы также расширить свой пример о том, как перенаправить стандартную ошибку и стандартный вывод запускаемого приложения?
Starfish
@Starfish Я думаю, что в блокноте нет stdout и stderr. Но на ваш вопрос было бы что-то вроде application.exe > stdout.txt 2>stderr.txt. Добавление вашего вопроса к приведенному выше ответу будет отличаться от вопроса исходного плаката. Может быть, вы можете начать новый вопрос, чтобы задать более подробно.
контрольная сумма
1
Совершенно бессмысленное решение. Винда снова выигрывает.
Ярослав Рахматуллин
9

Используйте start notepad.exe.

Больше информации с start /?.

Бенуа
источник
1
И какой именно аргумент? /B? Прочитал, но при использовании start /B notepad.exeокно cmd не исчезает.
Possa
Хорошо, это сложнее, чем использовать \I. Команда cmd вызывает cygwin, а cygwin запускает блокнот. Я использую, start \I cygwinи первое окно исчезает, но второе окно остается на заднем плане. В сценарии cygwin я использовал notepad.exe &а затемexit
Possa
cygstart запускает блокнот, но консоль остается в фоновом режиме.
Possa
5

Самый простой способ - это просто начать с start

start notepad.exe

Здесь вы можете найти дополнительную информацию оstart

братья28
источник
4

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

MrBogus
источник
это не закрывает окно 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
-4

Попробуй начать path\to\cygwin\bin\bash.exe

гггх
источник
1
Это на самом деле не отвечает на вопрос OP. Он не спрашивал, с чего начать cygwin.
Джереми Дж. Старчер,