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

160

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

Мухаммед аль-Равабде
источник
1
Можете ли вы указать, что вы хотите сделать? Вы хотите выполнить команду в командной строке в фоновом режиме или вы хотите выполнить всю командную строку в фоновом режиме, чтобы ее не было видно с рабочего стола?
Омнибрейн
мне нужно, чтобы два тростника выполнили команду в командной строке в фоновом режиме или вы хотите выполнить всю командную строку в фоновом режиме
Мохаммад аль-Равабде
Дублирует этот вопрос на ServerFault .
Дан Даскалеску

Ответы:

37

Ваш вопрос довольно расплывчатый, но на ServerFault есть сообщение, которое может содержать необходимую информацию. Ответ там описывает, как запустить скрытое окно командного файла:

Вы можете запустить его без вывода сообщений, используя файл сценария Windows. Метод Run позволяет запускать скрипт в невидимом режиме. Создайте .vbs файл как этот

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing

и запланировать это. Второй аргумент в этом примере устанавливает стиль окна. 0 означает «скрыть окно».

nhinkle
источник
Это потрясающе. SetPoint для Logitech никогда, НИКОГДА, не начинается с Windows. Я запускаю его вручную уже около 3 лет. Имеет ли значение, где находится партия? Я видел, как некоторые люди помещали этот тип командного файла в C или в корень.
ejbytes
245

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

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
Novicaine
источник
3
Мне больше нравится этот ответ, потому что он не открывает другое командное окно
wisbucky
3
Кажется, это не работает для меня, похоже, я только создаю новый экземпляр cmd [?], Однако, если я запустил его так, как start /B "" programон работал ...
rogerdpack
1
@rogerdpack Это верно. По какой-то причине в Windows 7 это формат команды. "" Является обязательным параметром заголовка.
ejbytes
10
К сожалению, если я выхожу из окна оболочки, в котором я породил процесс, похоже, что процесс также завершается.
Palswim
2
@Qwerty: Посмотрите на MSDN для SetConsoleCtrlHandler
Zan Lynx,
68

Я подозреваю, что вы имеете в виду: запустить что-то в фоновом режиме и немедленно вернуть командную строку с продолжением запущенной программы.

START "" program

Какой Unix-эквивалент

program &
Пол Дуглас
источник
7
что такое эквивалент фг? Можем ли мы закрыть командную строку, и программа все равно будет работать?
Ненотлеп
1
Кроме того, я хочу запустить программу в командной строке и время от времени возвращаться к ней, как на экране - это возможно? Мне нужно иметь возможность закрыть командную строку, но сохранить работающую программу работоспособной.
Ненотлеп
4
Что это за пустой параметр start? Он не работает без него (выполняет только новый экземпляр команды), но startсправка ничего об этом не говорит, в нем говорится, что все параметры являются опциональными (или я не понимаю этого).
Давид Ференци Рогожан
@DawidFerenczy startработает без пустого параметра для меня, но я, кажется, получаю оболочки с отдельной конфигурацией, когда я использую пустой параметр, поскольку настройка, которую я сделал, когда у меня не было пустого параметра, не используется, когда я использую пустой параметр. Интересно, почему они используют отдельные конфигурации?
Здравствуйте, до свидания
@Paul START "" programзапускает для меня команду в новом терминале, в то время как program &в Unix запускает команду и выводит вывод на тот же терминал.
Здравствуйте, до свидания
15
START /MIN program 

вышеупомянутый довольно близко с его аналогом Unix program &

Шива Шанкаран
источник
6

Вы можете использовать этот (прокомментированный!) Скрипт PowerShell:

# Create the .NET objects
$psi = New-Object System.Diagnostics.ProcessStartInfo
$newproc = New-Object System.Diagnostics.Process
# Basic stuff, process name and arguments
$psi.FileName = $args[0]
$psi.Arguments = $args[1]
# Hide any window it might try to create
$psi.CreateNoWindow = $true
$psi.WindowStyle = 'Hidden'
# Set up and start the process
$newproc.StartInfo = $psi
$newproc.Start()
# Return the process object to the caller
$newproc

Сохраните это как .ps1файл. После включения выполнения сценария (см. «Включение сценариев» в вики-теге PowerShell ) вы можете передать ему одну или две строки: имя исполняемого файла и, необязательно, строку аргументов. Например:

.\hideproc.ps1 'sc' 'stop SomeService'

Я подтверждаю, что это работает на Windows 10.

Бен Н
источник
4
да старт / б больше не работает.
Саджук
3

Вот как мой внутренний сервер PHP переходит в фоновый режим. Технически это должно работать для всех.

start /B "" php -S 0.0.0.0:8000 &

Спасибо

Суяш Джайн
источник
1

Если вы хотите, чтобы программа командной строки запускалась без ведома пользователя, определите ее как службу Windows, и она будет выполняться по расписанию.

CarlF
источник
4
Как ты это делаешь?
Бароп
В качестве альтернативы вы можете сделать это запланированной задачей - Панель управления-> Администрирование-> Запланированные задачи или использовать schtasksкоманду в Windows XP и выше (предупреждение: schtasksсложно).
LawrenceC
0

Соответствующий ответ с 2 примерами:

  1. Ниже открывается calc.exe:

вызовите START / B "мой calc" "calc.exe"

  1. Иногда передний план нежелателен, тогда вы запускаете свернутый, как показано ниже:

вызовите START / MIN "my mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"

Манохар Редди Поредди
источник
Это, кажется, не сводит к минимуму:call Start /MIN "c" "calc.exe"
Moondra
1
правильно, это работает для блокнота: вызов начала / мин "n" "notepad.exe"
Манохар Редди Поредди
Так что это работает для оконных приложений, но не для консольных приложений. Цифры, как можно Пропускают SW_*с CreateProcessWпомощью STARTUPINFO::wShowWindow( в том числе SW_HIDE).
0xC0000022L
Что такое полная команда, с приведенным выше, как «Пуск» или другой инструмент? нам нужно написать другую программу?
Манохар Редди Поредди
-1

Вы можете увидеть правильный способ сделать это по этой ссылке:

Как запустить запланированную задачу без появления командного окна

Подводя итог, вы должны установить флажок «Запускать, вошел ли пользователь в систему или нет». Учетные данные пользователя задачи следует вводить после нажатия «ОК».

Даниэль Алонсо
источник
-2

только что наткнулся на этот поток Windows 7, используя Power Shell, запускает исполняемые файлы в фоновом режиме, точно так же, как имя файла Unix &

пример: start -NoNewWindow filename

помочь начать

NAME Start-Process

SYNTAX Start-Process [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError] [-RedirectStandardInput] [-Redirectutput] [-Red [-WindowStyle {Normal | Скрытый | Минимизировано | Развернуто}] [-UseNewEnvironment] []

Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-WorkingDirectory <string>] [-PassThru] [-Verb
<string>] [-Wait] [-WindowStyle <ProcessWindowStyle> {Normal | Hidden | Minimized | Maximized}]
[<CommonParameters>]

Псевдоним соки начало

Джерри
источник