Как запустить файл bat в фоновом режиме из другого файла bat?
у меня есть скрипт" setup", который я запускаю утром, который запускает все программы, которые мне нужны. Теперь некоторые из них нуждаются в дополнительной настройке среды, поэтому мне нужно обернуть их в небольшие сценарии BAT.
как запустить такой скрипт на Windows XP в фоновом режиме?
CALL env-script.bat запускает его синхронно, т. е. сценарий установки может продолжаться только после завершения команды в env-script.
START/B env-script.bat запускает другой экземпляр CMD.exe в та же командная строка, оставляя ее в очень грязном состоянии (я вижу вывод вложенного CMD.exe, клавиатура мертва на некоторое время, скрипт не выполняется).
START/B CMD env-script.bat дает тот же результат. Ни один из флагов в CMD, похоже, не соответствует моему счету.
7 ответов:
два года, но для полноты картины...
стандартный, встроенный подход: (т. е. поведение, которое вы получите при использовании
&в Linux)START /B CMD /C CALL "foo.bat" [args [...]]Примечания: 1.
CALLв паре с .bat файл, потому что там, где он обычно проходит.. (т. е. это просто расширение кCMD /C CALL "foo.bat"форма, чтобы сделать его асинхронным. Обычно требуется правильно получить коды выхода, но это не проблема здесь.); 2. Двойные кавычки .bat файл-это только требуется если имя содержит пробелы. (Имя может быть путем, и в этом случае есть большая вероятность этого.).если вы не хотите на выходе:
START /B CMD /C CALL "foo.bat" [args [...]] >NUL 2>&1если вы хотите, чтобы летучая мышь была запущена на независимой консоли: (т. е. другое окно)
START CMD /C CALL "foo.bat" [args [...]]если вы хотите, чтобы другое окно зависало после этого:
START CMD /K CALL "foo.bat" [args [...]]Примечание: это на самом деле плохая форма, Если у вас нет пользователей, которые в частности, вы хотите использовать открытое окно в качестве обычной консоли. Если вы просто хотите, чтобы окно оставалось вокруг, чтобы увидеть результат, лучше поставить
PAUSEв конце файла bat. Или даже еще добавить^& PAUSEпосле командной строки:START CMD /C CALL "foo.bat" [args [...]] ^& PAUSE
поскольку START-это единственный способ выполнить что-то в фоновом режиме из сценария CMD, я бы рекомендовал вам продолжать его использовать. Вместо модификатора /B попробуйте /MIN, чтобы вновь созданное окно не беспокоило вас. Кроме того, вы можете установить приоритет на что-то более низкое с /LOW или /BELOWNORMAL, что должно улучшить отзывчивость вашей системы.
кроме переднего плана/фона термин. Другой способ скрыть запущенное окно-через vbscript, если он все еще доступен в вашей системе.
DIM objShell set objShell=wscript.createObject("wscript.shell") iReturn=objShell.Run("yourcommand.exe", 0, TRUE)назовите его как sth.VBS и вызывать ее из летучей мыши, поставить в запланированные задачи и т. д. Лично я отключу vbs без спешки в любой системе Windows, которой я управляю:)
создайте новое приложение c# Windows и вызовите этот метод из main:
public static void RunBatchFile(string filename) { Process process = new Process(); process.StartInfo.FileName = filename; // suppress output (command window still gets created) process.StartInfo.Arguments = "> NULL"; process.Start(); process.WaitForExit(); }
Comments