ฉันจะรันบรรทัดคำสั่งของ Windows เป็นพื้นหลังได้อย่างไร


160

ฉันจะดำเนินการบรรทัดคำสั่งของ windows ในพื้นหลังโดยไม่ต้องโต้ตอบกับผู้ใช้ที่ใช้งานอยู่ได้อย่างไร


1
คุณสามารถระบุสิ่งที่คุณต้องการจะทำอย่างไร คุณต้องการที่จะดำเนินการคำสั่งบนบรรทัดคำสั่งในพื้นหลังหรือคุณต้องการที่จะดำเนินการบรรทัดคำสั่งทั้งหมดในพื้นหลังจึงไม่สามารถมองเห็นได้จากเดสก์ทอป?
omnibrain

ฉันต้องการสองอ้อยดำเนินการคำสั่งในบรรทัดคำสั่งในพื้นหลังหรือคุณต้องการที่จะดำเนินการบรรทัดคำสั่งทั้งหมดในพื้นหลัง
Mohammad 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 ไม่เคยไม่เคยเริ่มต้นด้วย windows ฉันเริ่มด้วยตนเองประมาณ 3 ปีแล้ว ชุดนี้มีความสำคัญอย่างไร? ฉันเคยเห็นบางคนใส่แบทช์ไฟล์ประเภทนี้ใน C หรือรูท
ejbytes

244

นี่มันช้าไปหน่อย แต่ฉันก็เจอคำถามนี้ในขณะที่ค้นหาคำตอบด้วยตัวเองและฉันก็พบสิ่งนี้:

START /B program

ซึ่งบน Windows นั้นใกล้กับคำสั่ง Linux มากที่สุด:

program &

จากระบบช่วยเหลือของคอนโซล:

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

ซึ่งเทียบเท่ากับยูนิกซ์ของ

program &

7
fg เทียบเท่าคืออะไร? เราสามารถปิด command prompt และ porgram จะยังทำงานได้หรือไม่
Nenotlep

1
นอกจากนี้ฉันต้องการเรียกใช้โปรแกรมในพร้อมรับคำสั่งและกลับไปเป็นครั้งคราวเช่นเดียวกับในหน้าจอ - เป็นไปได้ที่จะใช้สิ่งนี้หรือไม่ ฉันต้องสามารถปิดพรอมต์คำสั่ง แต่ใช้งานโปรแกรมที่รันอยู่ต่อไปได้
Nenotlep

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 wiki ) คุณสามารถส่งหนึ่งหรือสองสาย: ชื่อของไฟล์เรียกทำงานและบรรทัดอาร์กิวเมนต์ที่เป็นทางเลือก ตัวอย่างเช่น:

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

ฉันยืนยันว่าใช้งานได้กับ Windows 10


4
yep start / b ใช้งานไม่ได้อีกต่อไป
Sajuuk

3

นี่คือวิธีที่เซิร์ฟเวอร์ภายใน PHP ของฉันเข้าสู่พื้นหลัง ดังนั้นในทางเทคนิคแล้วควรใช้งานได้สำหรับทุกคน

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

ขอบคุณ


1

หากคุณต้องการให้โปรแกรมบรรทัดคำสั่งรันโดยที่ผู้ใช้ไม่ทราบให้กำหนดเป็นบริการของ Windows และโปรแกรมจะทำงานตามกำหนดเวลา


4
คุณจะทำอย่างไร
barlop

หรือคุณสามารถกำหนดให้เป็นงานตามกำหนดเวลา - แผงควบคุม -> เครื่องมือการดูแลระบบ -> ภารกิจตามกำหนดเวลาหรือใช้schtasksคำสั่งใน Windows XP ขึ้นไป (คำเตือน: schtasksซับซ้อน)
LawrenceC

0

คำตอบที่เกี่ยวข้องกับ 2 ตัวอย่าง:

  1. ด้านล่างเปิด calc.exe:

โทรหา START / B "my calc" "calc.exe"

  1. บางครั้งที่พื้นหน้าไม่เป็นที่ต้องการคุณจะเรียกใช้ย่อเล็กสุดดังนี้:

โทรหา START / นาที "my mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"


ดูเหมือนว่ามันจะไม่ลดขนาดลง:call Start /MIN "c" "calc.exe"
moondra

1
ถูกต้องมันใช้งานได้กับ Notepad: โทรเริ่ม / นาที "n" "notepad.exe"
Manohar Reddy Poreddy

ดังนั้นจึงใช้งานได้สำหรับแอปพลิเคชันที่มีหน้าต่าง แต่ไม่เหมาะสำหรับแอปพลิเคชันคอนโซล ตัวเลขในฐานะที่เป็นหนึ่งสามารถส่งผ่านSW_*ไปยังCreateProcessWผ่านSTARTUPINFO::wShowWindow(รวมถึงSW_HIDE)
0xC0000022L

คำสั่งเต็มรูปแบบคืออะไรกับข้างต้นเช่น "เริ่มต้น" หรือเครื่องมืออื่น ๆ ? เราจำเป็นต้องเขียนโปรแกรมอื่นหรือไม่?
Manohar Reddy Poreddy

-1

คุณสามารถดูวิธีที่ถูกต้องในการทำลิงค์นี้:

วิธีการเรียกใช้งานที่กำหนดเวลาไว้โดยไม่มีหน้าต่างคำสั่งปรากฏ

โดยสรุปคุณต้องทำเครื่องหมายที่ช่อง 'เรียกใช้ไม่ว่าผู้ใช้จะเข้าสู่ระบบหรือไม่' ควรป้อนข้อมูลรับรองผู้ใช้งานหลังจากกด 'ตกลง'


-2

เพิ่งเจอเธรด windows 7 นี้โดยใช้ power shell เรียกใช้ไฟล์ปฏิบัติการในพื้นหลังเหมือนกับชื่อไฟล์ unix &

ตัวอย่าง: start -NoNewWindow ชื่อไฟล์

ช่วยเริ่มต้น

NAME เริ่มต้นกระบวนการ

SYNTAX Start-Process [-FilePath] [[-ArgumentList]] [-Credential] [-DirectoryInputDirectory] [-LoadUserProfile] [-NoNewWindow] [-RedirectStandardError] [-RedirectStandardInput] [-WindowStyle {ปกติ | ซ่อน | ย่อเล็กสุด | Maximized}] [-UseNewEnvironment] []

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

ALIASES saps เริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.