Как запустить файл 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, похоже, не соответствует моему счету.

866   7  

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();
}

это работает на моей домашней установке Windows XP, способ Unix:

call notepad.exe & 

на самом деле довольно легко с этой опцией в конце:

c:\start партия.bat-WindowStyle Hidden

Comments

    Ничего не найдено.