Làm thế nào tôi có thể thực thi một dòng lệnh Windows trong nền?


160

Làm thế nào tôi có thể thực thi một dòng lệnh windows trong nền mà không tương tác với người dùng đang hoạt động?


1
Bạn có thể chỉ định những gì bạn muốn làm? Bạn có muốn thực hiện một lệnh trên dòng lệnh ở chế độ nền hay bạn muốn thực hiện toàn bộ dòng lệnh ở chế độ nền, vì vậy nó không thể xem được từ máy tính để bàn?
omnibrain

Tôi cần hai gậy thực hiện một lệnh trên dòng lệnh ở chế độ nền hoặc bạn có muốn thực hiện toàn bộ dòng lệnh ở chế độ nền không
Mohammad AL-Rawabdeh

Câu trả lời:


37

Câu hỏi của bạn khá mơ hồ, nhưng có một bài đăng trên ServerFault có thể chứa thông tin bạn cần. Câu trả lời ở đó mô tả cách chạy một cửa sổ tệp bó:

Thay vào đó, bạn có thể chạy nó một cách im lặng bằng tệp Windows Script. Phương thức Run cho phép bạn chạy một tập lệnh ở chế độ vô hình. Tạo một .vbs tệp như thế này

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

và lên lịch cho nó Đối số thứ hai trong ví dụ này đặt kiểu cửa sổ. 0 có nghĩa là "ẩn cửa sổ."


Đây là hoàn hảo. SetPoint cho Logitech không bao giờ, KHÔNG BAO GIỜ, bắt đầu với các cửa sổ. Tôi đã bắt đầu nó bằng tay khoảng 3 năm nay. Có vấn đề ở đâu là lô? Tôi đã thấy một số người đặt loại tệp bó này trong C hoặc root.
ejbyte

244

Điều này hơi muộn nhưng tôi vừa chạy qua câu hỏi này trong khi tự mình tìm kiếm câu trả lời và tôi đã tìm thấy điều này:

START /B program

trong đó, trên Windows, là lệnh gần nhất với Linux:

program &

Từ hệ thống TRỢ GIÚP:

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.

Một vấn đề tôi thấy với nó là bạn có nhiều hơn một chương trình ghi vào cửa sổ giao diện điều khiển, nó có một chút khó hiểu và lộn xộn.

Để làm cho nó không tương tác với người dùng, bạn có thể chuyển hướng đầu ra thành một tệp:

START /B program > somefile.txt

3
Tôi thích câu trả lời này nhất vì nó không mở một cửa sổ lệnh khác
wvducky

3
Điều này dường như không hoạt động đối với tôi, nó dường như chỉ tạo ra một cá thể cmd mới [?] Tuy nhiên nếu tôi chạy nó như thế start /B "" programthì nó đã hoạt động ...
rogerdpack

1
@rogerdpack Đúng vậy. Đối với một số lý do với Windows 7, đây là định dạng lệnh. "" Là tham số tiêu đề bắt buộc.
ejbyte

10
Thật không may, nếu tôi thoát khỏi cửa sổ shell mà tôi sinh ra quá trình, có vẻ như quá trình cũng chấm dứt.
palswim

2
@Qwerty: Hãy xem MSDN cho SetConsoleCtrlHandler
Zan Lynx

68

Tôi nghi ngờ ý bạn là: Chạy một cái gì đó trong nền và lấy lại dòng lệnh ngay lập tức với chương trình đã khởi chạy.

START "" program

Tương đương với Unix

program &

7
tương đương fg là gì? Chúng ta có thể đóng dấu nhắc lệnh và porgram vẫn sẽ chạy không?
Nenotlep

1
Ngoài ra, tôi muốn chạy một chương trình trong dấu nhắc lệnh và thỉnh thoảng quay lại chương trình, như trong màn hình - điều đó có khả thi với điều này không? Tôi cần có khả năng đóng dấu nhắc lệnh nhưng giữ cho chương trình đang chạy có thể sử dụng được.
Nenotlep

4
Thông số trống đó là startgì? Nó không hoạt động mà không có nó (chỉ thực hiện một thể hiện lệnh mới), nhưng startsự giúp đỡ không nói gì về nó, nó nói rằng tất cả các tham số là tối ưu (hoặc tôi không hiểu nó).
Dawid Ferenczy Rogožan

@DawidFerenczy starthoạt động mà không có tham số trống đối với tôi, nhưng tôi dường như nhận được một hệ vỏ với cấu hình riêng khi tôi sử dụng tham số trống, như một cài đặt tôi đã làm khi tôi không sử dụng tham số trống khi tôi sử dụng tham số trống. Tôi tự hỏi tại sao họ sử dụng cấu hình riêng biệt?
HelloGoodbye

@Paul START "" programbắt đầu một lệnh trong một thiết bị đầu cuối mới đối với tôi, trong khi program &trong Unix chạy lệnh đó và in đầu ra cho cùng một thiết bị đầu cuối.
HelloGoodbye

15
START /MIN program 

cái ở trên khá gần với đối tác Unix của nó program &


6

Bạn có thể sử dụng tập lệnh PowerShell (đã nhận xét!) Này:

# 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

Lưu nó dưới dạng một .ps1tập tin. Sau khi kích hoạt thực thi tập lệnh (xem Kích hoạt tập lệnh trong wiki thẻ PowerShell ), bạn có thể truyền cho nó một hoặc hai chuỗi: tên của dòng thực thi và tùy chọn dòng đối số. Ví dụ:

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

Tôi xác nhận rằng điều này hoạt động trên Windows 10.


4
bắt đầu / b không còn hoạt động.
Sajuuk

3

Đây là cách máy chủ nội bộ PHP của tôi đi vào nền. Vì vậy, về mặt kỹ thuật nó nên làm việc cho tất cả.

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

Cảm ơn


1

Nếu bạn muốn chương trình dòng lệnh chạy mà không cần người dùng biết về nó, hãy xác định nó là một Dịch vụ Windows và nó sẽ chạy theo lịch trình.


4
làm thế nào để bạn làm điều đó?
barlop

Ngoài ra, bạn có thể biến nó thành tác vụ theo lịch trình - Bảng điều khiển-> Công cụ quản trị-> Tác vụ theo lịch hoặc sử dụng schtaskslệnh trong Windows XP trở lên (cảnh báo: schtasksrất phức tạp).
LawrenceC

0

Một câu trả lời liên quan, với 2 ví dụ:

  1. Dưới đây mở calc.exe:

gọi START / B "calc của tôi" "calc.exe"

  1. Đôi khi foreground không được mong muốn, sau đó bạn chạy tối thiểu hóa như sau:

gọi START / MIN "mongod của tôi" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"


Điều này dường như không chạy nó được giảm thiểu:call Start /MIN "c" "calc.exe"
moondra

1
đúng, nó hoạt động với notepad: gọi start / min "n" "notepad.exe"
Manohar Reddy Poreddy

Vì vậy, nó hoạt động cho các ứng dụng cửa sổ nhưng không phải cho các ứng dụng giao diện điều khiển. Con số, như người ta có thể vượt qua SW_*để CreateProcessWqua STARTUPINFO::wShowWindow(bao gồm SW_HIDE).
0xC0000022L

Một lệnh đầy đủ, với ở trên như "bắt đầu" hoặc công cụ khác là gì? chúng ta có cần viết chương trình khác không?
Manohar Reddy Poreddy


-2

vừa bắt gặp chủ đề này, windows 7, sử dụng power shell, chạy chương trình thực thi trong nền, giống hệt như tên tệp unix &

ví dụ: start -NoNewWindow tên tệp

giúp bắt đầu

TÊN Quá trình bắt đầu

Quá trình bắt đầu SYNTAX [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStiteriaError] [-WindowStyle {Bình thường | Ẩn | Tối thiểu hóa | Tối đa hóa}] [-UseNewEn Môi trường] []

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

ALIASES bắt đầu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.