โปรแกรมเรียกใช้สคริปต์แบตช์ Windows และออกจากคอนโซล


92

ฉันมีชุดสคริปต์ที่ใช้เปิดโปรแกรมเช่นnotepad.exe. เมื่อฉันดับเบิลคลิกที่ไฟล์แบตช์นี้แผ่นจดบันทึกจะเริ่มทำงานตามปกติ แต่หน้าต่างสีดำของcmdผู้ที่เปิดใช้งานnotepad.exeยังคงอยู่ในพื้นหลัง ฉันต้องทำอย่างไรเพื่อเปิดnotepad.exeและทำให้หน้าต่าง cmd หายไป

แก้ไข : \Iมีความซับซ้อนมากขึ้นกว่าการใช้

cmdโทรcygwinและเริ่มต้นcygwin notepadฉันใช้

start \I \path\cygwin\bin\bash.exe

และหน้าต่างแรก (cmd) จะหายไป แต่หน้าต่างที่สอง (\ cygwin \ bin \ bash.exe) ยังคงอยู่บนพื้นหลัง ในสคริปต์ cygwin ฉันใช้notepad.exe &แล้วออก

คำตอบ:


208
start "" "%SystemRoot%\Notepad.exe"

เก็บ""ในระหว่างเส้นทางเริ่มต้นและใบสมัครของคุณ


เพิ่มคำอธิบาย:

โดยปกติเมื่อเราเปิดโปรแกรมจากไฟล์แบตช์ด้านล่างเราจะมีหน้าต่างสีดำที่พื้นหลังเหมือนที่ OP กล่าว

%SystemRoot%\Notepad.exe

นี่เป็นสาเหตุโดย Notepad ทำงานในพรอมต์คำสั่ง (กระบวนการ) เดียวกัน พรอมต์คำสั่งจะปิดหลังจากปิด notepad เพื่อหลีกเลี่ยงสิ่งนั้นเราสามารถใช้startคำสั่งเพื่อเริ่มกระบวนการแยกกันเช่นนี้

start %SystemRoot%\Notepad.exe

คำสั่งนี้ใช้ได้ตราบเท่าที่ไม่มีที่ว่างในเส้นทาง ในการจัดการพื้นที่ในเส้นทางในกรณีที่เราเพิ่ม"เครื่องหมายคำพูดเช่นนี้

start "%SystemRoot%\Notepad.exe"

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

start "" "%SystemRoot%\Notepad.exe"

อาร์กิวเมนต์แรก""คือการตั้งชื่อเรื่อง (ซึ่งเราตั้งเป็นค่าว่าง) และอาร์กิวเมนต์ที่สองของ "%SystemRoot%\Notepad.exe"คือคำสั่งเป้าหมายที่จะรัน (ซึ่งรองรับช่องว่างในเส้นทาง)

หากคุณต้องการเพิ่มพารามิเตอร์ให้กับคำสั่งเพียงต่อท้ายค่าที่ยกมานั่นคือ:

start "" "%SystemRoot%\Notepad.exe" "<filename>" 

12
หมายเหตุ: เมื่อคุณต้องการเริ่มไฟล์ java jar ด้วยวิธีนี้ตรวจสอบให้แน่ใจว่าได้ใช้javawไฟล์ปฏิบัติการ (ไม่ใช่แค่javaเพราะjavaจะเริ่มหน้าต่างแบตช์อื่น): เช่นstart "" "javaw" -jar C:\JavaProject\myApp.jar
TmTron

@checksum โปรดขยายตัวอย่างของคุณเกี่ยวกับวิธีเปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานและเอาต์พุตมาตรฐานของแอปพลิเคชันที่เริ่มทำงาน
Starfish

@Starfish ฉันคิดว่า notepad ไม่มี stdout และ stderr แต่สำหรับคำถามของคุณมันจะคล้ายapplication.exe > stdout.txt 2>stderr.txtๆ การเพิ่มคำถามของคุณในคำตอบข้างต้นจะเบี่ยงเบนไปจากคำถามของผู้โพสต์ต้นฉบับ คุณอาจเริ่มคำถามใหม่เพื่อถามรายละเอียดเพิ่มเติมได้
เช็คซัม

1
วิธีแก้ปัญหาที่ไร้เหตุผลอย่างที่สุด วินโดวส์ชนะอีกครั้ง
ЯрославРахматуллин

9

ใช้start notepad.exe.

ข้อมูลเพิ่มเติมกับstart /?.


1
และข้อโต้แย้งใด? /Bเหรอ? ผมอ่านแล้ว แต่ถ้าใช้start /B notepad.exeหน้าต่าง cmd ไม่หาย
Possa

\Iตกลงมีความซับซ้อนมากขึ้นกว่าการใช้ cmd เรียก cygwin และ cygwin เริ่มใช้งาน notepad ฉันใช้start \I cygwinและหน้าต่างแรกหายไป แต่หน้าต่างที่สองยังคงอยู่ที่พื้นหลัง ในสคริปต์ cygwin ฉันใช้notepad.exe &แล้วexit
Possa

cygstart เริ่ม notepad แต่คอนโซลยังคงอยู่ในพื้นหลัง
Possa



0

อืม ... ฉันทำในไฟล์แบตช์ของฉันแบบนี้โดยไม่ต้องใช้ CALL หรือ START:

%SystemRoot%\notepad.exe ..\%URI%
GOTO ENDF

ฉันไม่ได้ติดตั้ง Cygwin และฉันใช้ Windows XP


มีข้อผิดพลาด"The system cannot find the batch label specified - ENDF"ใน Windows 10
jcubic

0
start "" ExeToExecute

วิธีการใช้งานไม่ได้สำหรับฉันในกรณีของ Xilinx xsdk เพราะตามที่ @jeb ชี้ไว้ในความคิดเห็นด้านล่างมันเป็นไฟล์ค้างคาวที่ใช้งานได้จริง

ดังนั้นสิ่งที่ไม่ทำงานโดยพฤตินัยคือ

start "" BatToExecute

ฉันพยายามเปิด xsdk แบบนั้นและเปิด cmd แยกต่างหากที่ต้องปิดและ xsdk สามารถทำงานได้ด้วยตัวเอง

ก่อนที่จะเรียกใช้ xsdk ฉันเรียกใช้ (ต้นทาง) Env / Paths (พร้อมsettings64.bat ) เพื่อให้คำสั่ง xsdk.bat ได้รับการยอมรับ (เช่น xsdk โดยใช้. bat )

สิ่งที่ใช้ได้กับ. bat

call BatToExecute

2
สิ่งนี้อาจตอบคำถามได้ แต่ไม่ใช่คำถามนี้ คำถามเกี่ยวกับการเริ่มต้นไฟล์. exe ( notepad.exe) ด้วยการแยกไฟล์จาก cmd.exe คุณตอบวิธีเริ่มไฟล์. bat ในอินสแตนซ์เดียวกัน
jeb

-4

ลองสตาร์ทดู path\to\cygwin\bin\bash.exe


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