У меня есть сценарий «установки», который я запускаю утром, он запускает все программы, которые мне нужны. Теперь некоторым из них требуется дополнительная настройка среды, поэтому мне нужно обернуть их небольшими сценариями BAT.
Как запустить такой скрипт в Windows XP в фоновом режиме?
CALL env-script.bat
запускает его синхронно, т.е. сценарий установки может продолжаться только после завершения команды в сценарии env.
START/B env-script.bat
запускает другой экземпляр CMD.exe в той же командной строке, оставляя его в очень беспорядочном состоянии (я вижу вывод вложенного CMD.exe, клавиатура некоторое время не работает, сценарий не выполняется).
START/B CMD env-script.bat
дает тот же результат. Кажется, что ни один из флагов в CMD не соответствует моему счету.
источник
Два года, но для полноты ...
Стандартный встроенный подход: (т.е. поведение, которое вы получите при использовании
&
в Linux)Примечания: 1.
CALL
соединен с файлом .bat, потому что он обычно идет туда .. (т.е. это просто расширениеCMD /C CALL "foo.bat"
формы, чтобы сделать ее асинхронной. Обычно требуется правильно получить коды выхода, но это не проблема Вот.); 2. Двойные кавычки вокруг файла .bat необходимы только в том случае, если имя содержит пробелы. (Имя может быть путем, и в этом случае вероятность этого больше.)Если вам не нужен вывод:
Если вы хотите, чтобы летучая мышь запускалась на независимой консоли: (т.е. в другом окне)
Если вы хотите, чтобы потом оставалось другое окно:
Примечание. На самом деле это плохая форма, если только у вас нет пользователей, которые специально хотят использовать открытое окно как обычную консоль. Если вы просто хотите, чтобы окно оставалось на месте, чтобы видеть результат, лучше поставить
PAUSE
в конце файла bat. Или еще, добавьте^& PAUSE
после командной строки:источник
&
является оператором «а затем» (терминология?). (например ,cmd1 & cmd2
средство сделать «CMD1» , а затем «Cmd2». В отличие от&&
оператора, выполнение «Cmd2» не зависит от успешного выхода «cmd1») . В^
избежит&
таким образом , что он переходит в аргументы CMD вместо того , чтобы быть потребляется и запускается той же консолью, на которой был запущен START.start
иcmd
не дают полной функциональности я искал. Ваш ответ прибивает.START /B "" CMD /C "foo.bat" [args [...]] ^>nul 2^>^&1
START /B "" CMD /C PING 127.0.0.1 >NUL
похоже, работает независимо и ничего не выводится. (Вероятно, потому чтоCMD
наследуетSTART
дескрипторы ввода-вывода.) Я полагаю, разница в том, если вы хотите сохранитьSTART
нетронутым вывод (ошибки), что, вероятно, является хорошей идеей.CALL
просто потому, что я чувствовал, что это хорошая практика. (т.е. неиспользованиеCALL
для синхронных вызовов летучих мышей приведет к непредсказуемым кодам выхода, поэтому я последовательно объединяю вызовы летучих мышей,CALL
даже если это не строго применяется, например, в этом случае.)Поскольку START - это единственный способ выполнить что-то в фоновом режиме из сценария CMD, я бы рекомендовал вам продолжать его использовать. Вместо модификатора / B попробуйте / MIN, чтобы вновь созданное окно вас не беспокоило. Кроме того, вы можете установить более низкий приоритет с помощью / LOW или / BELOWNORMAL, что должно улучшить отзывчивость вашей системы.
источник
За исключением термина переднего плана / фона. Другой способ скрыть рабочее окно - использовать vbscript, если он все еще доступен в вашей системе.
назовите его как sth.vbs и вызовите его из bat, поместите в запланированную задачу и т.д. Лично я отключу vbs без спешки на любой системе Windows, которой я управляю :)
источник
Создайте новое приложение Windows на C # и вызовите этот метод из основного:
источник
Это работает с моей установкой Windows XP Home, способом Unix:
источник
На самом деле это довольно просто с этой опцией в конце:
источник
start
не имеет-WindowStyle
опции.C:` instead of
Странный путь ( C: \ Windows`) предполагает, что он нашел инструмент где-то в Интернете и скопировал его на свой жесткий диск.