Як я можу виконати командний рядок Windows у фоновому режимі?


160

Як я можу виконати командний рядок Windows у фоновому режимі, не взаємодіючи з активним користувачем?


1
Чи можете ви вказати, що ви хочете зробити? Ви хочете виконати команду у командному рядку у фоновому режимі чи ви хочете виконати весь командний рядок у фоновому режимі, так що це невідомо з робочого столу?
омнібрайн

Мені потрібні два тростини, які виконують команду в командному рядку у фоновому режимі або ви хочете виконати весь командний рядок у фоновому режимі
Мохаммед AL-Rawabdeh

Відповіді:


37

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

Ви можете запустити його безшумно, використовуючи натомість файл Windows Script. Метод запуску дозволяє запускати сценарій у невидимому режимі. Створіть такий .vbs файл

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

і розкладіть його. Другий аргумент у цьому прикладі задає стиль вікна. 0 означає "приховати вікно".


Це прекрасно. SetPoint для Logitech ніколи, НІКОЛИ, не починається з вікон. Я починаю це вручну вже близько 3 років. Чи має значення де знаходиться партія? Я бачив, як деякі люди ставлять цей тип пакетного файлу в C або root.
ejbytes

244

Це трохи пізно, але я просто зіткнувся з цим питанням, шукаючи відповідь, і знайшов це:

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

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
що таке еквівалент fg? Чи можемо ми закрити командний рядок і порграма все ще буде працювати?
Ненотлеп

1
Крім того, я хочу запустити програму в командному рядку і час від часу повертатися до неї, як на екрані - це можна зробити з цим? Мені потрібно мати можливість закрити командний рядок, але підтримувати працюючу програму придатною.
Ненотлеп

4
Що це за порожній параметр start? Без нього він не працює (виконує лише новий екземпляр команди), але startдовідка нічого не говорить про це, вказується, що всі параметри є оптимальними (або я не розумію цього).
Dawid Ferenczy Rogožan

@DawidFerenczy startпрацює без порожнього параметра для мене, але я, здається, отримую оболонки з окремою конфігурацією, коли я використовую порожній параметр, як налаштування, яке я робив, коли у мене не було порожнього параметра, не використовується, коли я використовую порожній параметр. Цікаво, чому вони використовують окремі конфігурації?
HelloGoodbye

@Paul START "" programзапускає команду в новому для мене терміналі, в той час як program &в Unix виконує команду в і друкує вихід на той же термінал.
HelloGoodbye


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
так, старт / b більше не працює.
Саджук

3

Ось як внутрішній сервер PHP переходить у другий план. Так технічно це повинно працювати для всіх.

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

Дякую


1

Якщо ви хочете, щоб програма командного рядка запускалася без того, щоб користувач навіть про це знав, визначте її як службу Windows, і вона запуститься за графіком.


4
як ти це робиш?
барлоп

Крім того, ви можете зробити це плановим завданням - Панель управління-> Адміністративні інструменти-> Заплановані завдання або використовувати schtasksкоманду в Windows XP і вище (попередження: schtasksскладне).
LawrenceC

0

Відповідна відповідь з двома прикладами:

  1. Нижче відкривається calc.exe:

зателефонуйте START / B "мій calc" "calc.exe"

  1. Іноді передній план не бажаний, тоді ви запускаєте мінімізовано, як показано нижче:

зателефонуйте START / MIN "мій 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

Що таке повна команда з вище, як "start" чи іншим інструментом? нам потрібно написати іншу програму?
Манохар Редді Поредді

-1

Правильний спосіб зробити це можна за посиланням:

Як виконати заплановане завдання без появи вікна команд

Підсумовуючи, ви повинні встановити прапорець "Запустити, чи користувач увійшов чи ні" Введіть облікові дані користувачів, натиснувши "Ок".


-2

щойно натрапив на цю нитку Windows 7, використовуючи оболонку живлення, запускає виконувані файли у фоновому режимі, точно так само, як ім'я файлу unix

приклад: start -NoNewWindow ім'я файлу

допомогти почати

Стартовий процес NAME

SYNTAX Start-Process [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError] [-RedirectStandardaput] [-WindowStyle {Звичайний | Прихований | Мінімізований | Максимізовано}] [-UseNewEnvironment] []

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

ПІДТРИМУЮТЬСЯ соки

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.