ฉันจะเรียกใช้โปรแกรมจากแฟ้มแบตช์โดยไม่เปิดคอนโซลทิ้งไว้หลังจากที่โปรแกรมเริ่มทำงานได้อย่างไร


184

ในขณะนี้ไฟล์แบทช์ของฉันมีลักษณะเช่นนี้:

myprogram.exe param1

โปรแกรมเริ่มทำงาน แต่ DOS Window ยังคงเปิดอยู่ ฉันจะปิดมันได้อย่างไร


3
คุณควรเปลี่ยนคำตอบที่ยอมรับให้เป็นหนึ่งใน Marshall ที่ประกาศ
Rev1.0

คำตอบ:


163

คุณสามารถใช้คีย์เวิร์ด exit นี่คือตัวอย่างจากไฟล์แบตช์ของฉัน:

start myProgram.exe param1
exit

18
โปรดทราบว่าสิ่งนี้จะไม่เป็นเรื่องดีหากคุณใช้คอนโซลแบบโต้ตอบแทนการคลิกสองครั้งที่ไฟล์แบตช์ โดยทั่วไปไม่จำเป็นต้องใส่exitลงในแบทช์ไฟล์เล็กน้อย
Joey

27
ฉันลองคำสั่งนี้ใน Win8 ฉันไม่แน่ใจว่ามันแตกต่างกันหรือไม่ แต่โปรดทราบว่าคุณต้องระบุชื่อหน้าต่างเป็นพารามิเตอร์แรกของคุณ เมื่อฉันจะเรียกใช้ตามวิธีที่อธิบายไว้ของ Patrick มันก็จะเปิดพร้อมท์คำสั่งใหม่ด้วย "myProgram.exe" เป็นชื่อหน้าต่าง:start "VPN" "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe"
Adam Plocher

9
โปรดทราบว่าหากคำสั่งของคุณมีช่องว่างและคุณใส่ไว้ในเครื่องหมายคำพูดคุณจะต้องเพิ่มพารามิเตอร์ที่ยกมาพิเศษก่อนหน้านี้ในขณะที่ START ตีความพารามิเตอร์ที่ยกมาเป็นชื่อหน้าต่างและเฉพาะพารามิเตอร์ที่สอง folowing เป็นชื่อคำสั่ง
David Balažic

259

ใช้คำสั่ง start เพื่อป้องกันไฟล์แบตช์ไม่ให้รอโปรแกรม เพียงจำไว้ว่าให้ใส่เครื่องหมายคำพูดคู่ว่างเปล่าไว้หน้าโปรแกรมที่คุณต้องการเรียกใช้หลังจาก "เริ่ม" ตัวอย่างเช่นถ้าคุณต้องการเรียกใช้ Visual Studio 2012 จากชุดคำสั่ง:

Start ""  "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

สังเกตคำพูดสองครั้งหลังจากเริ่มต้น


55
@SharkAlley รูปแบบที่เหมาะสมคือstart <window name> <program name>
Kruug

5
นี่คือคำตอบที่ถูกต้อง ขอบคุณอัญประกาศคู่ที่ว่างเปล่าเป็นสิ่งที่ฉันต้องการ
ริชาร์ด

ฉันมีสคริปต์สำรองที่ฉันเรียกใช้ทุกสัปดาห์และจะแก้ไขมันเล็กน้อยทุกสัปดาห์พยายามไปที่ a) ปิดโปรแกรมของฉัน b) สำรองข้อมูลของฉันและ c) รีสตาร์ทโปรแกรมและปิดพรอมต์คำสั่ง สุดท้ายนี้ได้รับคำสั่งให้ปิด (ยังทำให้การสำรองข้อมูลครั้งต่อไปของฉันไม่ทำงานฉันต้องปิดพรอมต์คำสั่ง !!!)
NobleUplift

@NobleUplift: สำหรับฉันนี่ทำงานได้ .. ด้านล่างเป็นบรรทัดที่แน่นอนเริ่มต้น "" "ไฟล์ C: \ Program (x86) \ JetBrains \ IntelliJ IDEA 2016.2.5 \ bin \ idea64.exe" &
Xinus

53

ดูที่คำสั่ง START คุณสามารถทำได้:

START rest-of-your-program-name

ตัวอย่างเช่นไฟล์ชุดนี้จะรอจนกว่าแผ่นจดบันทึกจะออก:

@echo off
notepad c:\test.txt

อย่างไรก็ตามสิ่งนี้จะไม่:

@echo off
start notepad c:\test.txt

31

จากคำถามของฉัน:

start /b myProgram.exe params...

ใช้งานได้ถ้าคุณเริ่มโปรแกรมจากเซสชัน DOS ที่มีอยู่

หากไม่เป็นเช่นนั้นให้เรียกสคริปต์ vb

wscript.exe invis.vbs myProgram.exe %*

โฮสต์สคริปต์ของ Windows Run () วิธีการใช้เวลา:

  • intWindowStyle: 0 หมายถึง "หน้าต่างที่มองไม่เห็น"
  • bWaitOnReturn: false หมายความว่าสคริปต์แรกของคุณไม่จำเป็นต้องรอให้สคริปต์ที่สองของคุณเสร็จสิ้น

นี่คือ invis.vbs:

set args = WScript.Arguments
num = args.Count

if num = 0 then
    WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
    WScript.Quit 1
end if

sargs = ""
if num > 1 then
    sargs = " "
    for k = 1 to num - 1
        anArg = args.Item(k)
        sargs = sargs & anArg & " "
    next
end if

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False

1
+1 ต้องเป็นวิธีที่ง่ายกว่า แต่นี่เป็นคำตอบเดียวที่เหมาะกับฉัน
DN

ขอบคุณ - ธง / b นั้นเป็นสิ่งที่ฉันกำลังมองหา
AP

21

นี่เป็นสิ่งเดียวที่ทำงานสำหรับฉันเมื่อฉันพยายามเรียกใช้คลาส java จากแบตช์ไฟล์:

start "cmdWindowTitle" /B "javaw" -cp . testprojectpak.MainForm

คุณสามารถปรับแต่งstartคำสั่งตามที่คุณต้องการสำหรับโครงการของคุณโดยทำตามไวยากรณ์ที่เหมาะสม:

Syntax
      START "title" [/Dpath] [options] "command" [parameters]

Key:
   title      : Text for the CMD window title bar (required)
   path       : Starting directory
   command    : The command, batch file or executable program to run
   parameters : The parameters passed to the command

Options:
   /MIN       : Minimized
   /MAX       : Maximized
   /WAIT      : Start application and wait for it to terminate
   /LOW       : Use IDLE priority class
   /NORMAL    : Use NORMAL priority class
   /HIGH      : Use HIGH priority class
   /REALTIME  : Use REALTIME priority class

   /B         : Start application without creating a new window. In this case
                ^C will be ignored - leaving ^Break as the only way to 
                interrupt the application
   /I         : Ignore any changes to the current environment.

   Options for 16-bit WINDOWS programs only

   /SEPARATE   Start in separate memory space (more robust)
   /SHARED     Start in shared memory space (default)

18

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

start "name" /B myprogram.exe param1

4
"title"ตัวเลือกที่มีความสำคัญ หากเส้นทางของโปรแกรมมีช่องว่างมันจะต้องถูกล้อมรอบด้วยคำพูดดังนั้นเราต้องเพิ่ม"title"เพื่อหลีกเลี่ยงความล้มเหลว
โฆษณา

1
หากคุณปิดหน้าต่างหลักกระบวนการพื้นหลัง 'myprogram.exe' ก็จะปิดเช่นกัน
Aditya Gupta

14

วิธีแก้ "ปัญหาพื้นที่" และการพึ่งพาในท้องถิ่น:

@echo off
cd "C:\Program Files\HeidiSQL"
start heidisql.exe

cd "C:\Program Files (x86)\Google\Chrome\Application"
start chrome.exe

exit

นี่ไม่ใช่คำตอบสำหรับคำถาม
jeb

2
จริง แต่ฉันคิดว่ามันเป็นทางออกที่ดีที่แก้ปัญหาอื่น ๆ ที่ฉันมีเช่นกัน
Gilco

2
เป็นทางออกสำหรับฉัน หน้าต่าง Dos จะเปิดขึ้น แต่จะปิดอีกครั้งและวิธีแก้ปัญหาจะทำงาน ฉันไม่เข้าใจ downvotes (i upvoted)
JoeFox

ฉันทั้งสอง วิธีแก้ปัญหาใช้งานได้และแก้ปัญหา
Gilco

2

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

Start "C:\Program Files\someprog.exe"

อาจทำให้เกิดปัญหาในบาง windows windows ตามStartจริง ๆ คาดว่าชุดของอัญประกาศแรกเป็นชื่อเรื่องของ windows ดังนั้นจึงเป็นวิธีที่ดีที่สุดในการแสดงความคิดเห็นเป็นครั้งแรกหรือความคิดเห็นที่ว่างเปล่า:

Start "" "C:\Program Files\someprog.exe"

หรือ

Start "Window Title" "C:\Program Files\someprog.exe"

0

โซลูชันของฉันทำจาก GUI:

  1. สร้างทางลัดไปยังโปรแกรมที่คุณต้องการเรียกใช้

  2. แก้ไขคุณสมบัติของทางลัด

  3. เปลี่ยนTARGETฟิลด์เป็น%COMSPEC% /C "START "" "PROGRAMNAME"";

  4. เปลี่ยนRUNฟิลด์เพื่อย่อให้เล็กสุด

พร้อม! ดูว่าคุณชอบมัน ...

PS: พารามิเตอร์โปรแกรมสามารถแทรกระหว่างเครื่องหมายคำพูดสุดท้ายสองตัว PROGRAMNAMEสตริงสามารถเป็นได้ทั้งชื่อไฟล์, ญาติหรือเส้นทางที่แน่นอน - ถ้าคุณใส่ในเส้นทางที่แน่นอนและลบตัวอักษรไดรฟ์และอัฒภาคแล้วนี้จะทำงานใน thumbdrive ไม่ว่าสิ่งที่ตัวอักษรที่กำหนดโฮสต์คอมพิวเตอร์ไป .. . (หากคุณวางทางลัดไว้ในโฟลเดอร์เดียวกันและนำหน้าชื่อไฟล์โปรแกรมPROGRAMNAMEด้วย%CD%ตัวแปรพา ธ จะจับคู่กันเสมอโดยใช้เล่ห์เหลี่ยมเดียวกันในSTART INฟิลด์)


0

หากไฟล์แบตช์นี้เป็นสิ่งที่คุณต้องการเรียกใช้ตามกำหนดเวลาหรือตลอดเวลา คุณสามารถใช้เครื่องมือกำหนดเวลาของ windows และจะไม่เปิดขึ้นในหน้าต่างเมื่อมันเริ่มไฟล์แบตช์

วิธีเปิดTask Scheduler:

  • เริ่ม -> Run / Search -> 'cmd'
  • ประเภทtaskschd.msc-> ป้อน

จากด้านขวาคลิกCreate Basic Taskและทำตามเมนู

หวังว่านี่จะช่วยได้


0

นี่คือทางออกที่ฉันต้องการ มันมาจากคำตอบของคำถามที่คล้ายกัน

ใช้ VBS Script เพื่อเรียกไฟล์แบตช์:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\path\to\your\batchfile.bat" & Chr(34), 0
Set WshShell = Nothing

คัดลอกบรรทัดด้านบนไปยังเครื่องมือแก้ไขและบันทึกไฟล์ด้วยนามสกุล. VBS

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