windows – Запустите пакетный файл в фоновом режиме из командной строки, продолжая использовать командную строку – PowerUser

Windows — как выполнить командную строку windows в фоновом режиме?

Это немного поздно, но я просто столкнулся с этим вопросом, ища ответ самостоятельно, и я нашел это:

START /B program

, который в Windows наиболее близок к команде Linux:

program &

Из консоли HELP:

C:>HELP START

Starts a separate window to run a specified program or command.

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [command/program] [parameters]

    "title"     Title to display in window title bar.
    path        Starting directory.
    B           Start application without creating a new window. The
                application has ^C handling ignored. Unless the application
                enables ^C processing, ^Break is the only way to interrupt
                the application.

Одна из проблем, с которой я столкнулся, заключается в том, что у вас есть несколько программ, записывающих в консольное окно, это немного запутывает и смешивается.

Чтобы он не взаимодействовал с пользователем, вы можете перенаправить вывод в файл:

START /B program > somefile.txt

Как запустить файл bat в фоновом режиме из другого файла bat? | блог о программировании

два года, но для полноты картины…

стандартный, встроенный подход: (т. е. поведение, которое вы получите при использовании & в Linux)

START /B CMD /C CALL "foo.bat" [args [...]]

Примечания: 1. CALL в паре с .bat файл, потому что там, где он обычно проходит.. (т. е. это просто расширение к CMD /C CALL "foo.bat" форма, чтобы сделать его асинхронным. Обычно требуется правильно получить коды выхода, но это не проблема здесь.); 2. Двойные кавычки .bat файл-это только требуется если имя содержит пробелы. (Имя может быть путем, и в этом случае есть большая вероятность этого.).

:/>  Rh 3 94v 0 e252098 схема

если вы не хотите на выходе:

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

Сделать пакетный файл работать в фоновом режиме командной строки, продолжая использовать командную строку

это немного сложно, потому что вы не хотите, чтобы процесс изменения цвета фона перехватывал любой из ваших консольных входов. Вы можете добавить параметр /NOBREAK в команду TIMEOUT, чтобы скрипт никогда не читал stdin, за исключением того, что он все еще может обрабатывать a <CTRL-Break> interupt и спросите, хотите ли вы завершить сценарий. Пользователь может ответить Y и завершить фоновый процесс, но это может привести к путанице, если основной процесс также имеет пакетный сценарий. Какой процесс получает данные?

можно перенаправить стандартный ввод в значение nul для фонового процесса, но при перенаправлении ввода тайм-аут завершится ошибкой.

Я изменил ваше автоматическое изменение цвета текста.bat использовать задержку пинга вместо тайм-аута, что позволяет stdin быть перенаправлены на ноль. Я также поставил последнюю команду цвета в конце, чтобы закончить с более читаемой комбинацией цветов.

@echo off
set NUM=0 1 2 3 4 5 6 7 8 9 A B C D E F
for %%x in (%NUM%) do (
  for %%y in (%NUM%) do (
    color %%x%%y
    >nul ping localhost -n 2
  )
)
color 07

следующая команда используется для запуска скрипта в фоновом режиме с stdin перенаправляют nul:

start "" /b cmd /c "auto-change-text-color.bat <nul"

единственный странный побочный эффект заключается в том, что фоновый процесс все еще может получать <CTRL-Break>, и он выводит сообщение Terminate batch job (Y/N)?, но сразу продолжается, не дожидаясь ввода. Таким образом, вы можете смело запускать пакетный скрипт в основном процессе, issue <CTRL-Break> и получите два сообщения Terminate и нажмите Y или N, зная, что только пакетный скрипт в вашем основном процессе ответит (terminate или not).

:/>  cmd - Making command prompt wait - Stack Overflow

Оставьте комментарий

Adblock
detector