สร้างหน้าต่าง cmd.exe ใหม่จากในพรอมต์ cmd.exe อื่น


104

ฉันอยู่ระหว่างการตั้งค่า CruiseControl.NET ปัญหาที่ฉันพบคือฉันกำลังเรียกใช้ CC เป็นแอปพลิเคชันคอนโซลและเมื่อบิวด์ของฉันเสร็จสมบูรณ์และดำเนินการ (โดยใช้ exec) มันจะเปิดใช้งานภายในพรอมต์ CruiseControl DOS ฉันแค่ใช้ไฟล์แบตช์ธรรมดาเพื่อเปิดแอพของฉัน แต่การที่มันทำงานภายในพรอมต์เดียวกับ CC ทำให้ CC คิดว่าการสร้างจะดำเนินต่อไปตราบเท่าที่แอพของฉันทำงาน

มีพารามิเตอร์บรรทัดคำสั่งcmd.exeที่จะสร้างหน้าต่างพรอมต์แยกต่างหากหรือไม่?


1
cmd.exe เป็นเชลล์ CUI ไม่ใช่ GUI มันไม่สร้างหน้าต่าง ใช้หน้าต่างคอนโซลที่สร้างและจัดการโดยอินสแตนซ์ของ conhost.exe กระบวนการโฮสต์คอนโซล หากโปรแกรม CUI เริ่มทำงานตามปกติโค้ดการเริ่มต้นใน DLL ไคลเอ็นต์พื้นฐาน (kernel32.dll หรือ kernelbase.dll) จะสืบทอดคอนโซลของพาเรนต์ถ้ามีหรือจัดสรรคอนโซลใหม่เว้นแต่จะเริ่มต้นด้วยแฟล็กการสร้างDETACHED_PROCESS(เช่นไม่มีคอนโซล) . หากเริ่มต้นด้วยแฟล็กการสร้างCREATE_NEW_CONSOLE(ตามการstartใช้งานของ CMD ) DLL พื้นฐานจะจัดสรรคอนโซลใหม่แทนการรับช่วงของพาเรนต์เสมอ
Eryk Sun

คำตอบ:


204

ฉันคิดว่ามันได้ผล:

start cmd.exe

5
ตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบตัวเลือกต่างๆทั้งหมดสำหรับ start "start /?" / รอและ / ฉันสามารถมีประโยชน์ได้
Peter Gfader

50
fwiw คุณไม่จำเป็นต้องใส่ 'cmd.exe' หลังจากเริ่มต้น แค่คำว่า 'เริ่ม' ก็ทำได้
JustJeff

start / d <path> สำหรับผู้ที่ต้องการกำหนด path สำหรับหน้าต่าง cmd ใหม่ คำอธิบายโดยละเอียดที่นี่
anton.mo

57

นี่คือรหัสที่คุณต้องการ:

start cmd.exe @cmd /k "Command"

11
กำลัง@cmdทำอะไรอยู่? มีเอกสารประกอบหรือไม่?
michas

1
@กดเอาต์พุตโดยตรงซึ่งโดยปกติจะแสดงในพรอมต์ แต่คำสั่งจะยังคงถูกเรียกใช้
Thielicious

ฉันใช้สิ่งนี้มันได้ผล แต่ถ้าพยายามฆ่าโปรแกรมที่กำลังทำงานอยู่โดยใช้แป้นพิมพ์ขัดจังหวะ ctrl + c โปรแกรมที่กำลังรันไม่หยุด จะหยุดเมื่อคุณปิดหน้าต่างพรอมต์คำสั่งที่เพิ่งเปิดใหม่เท่านั้น
Sachin G.

^ไม่ทำงานสำหรับคำสั่งหลายคู่สายใช้ :( มีวิธีจัดการกับสิ่งนี้ไหม
user2173353


22
start cmd.exe 

เปิดหน้าต่างแยกต่างหาก

start file.cmd 

เปิดไฟล์แบตช์และเรียกใช้งานในพรอมต์คำสั่งอื่น



2
START "notepad.exe"
echo Will launch the notepad.exe application
PAUSE

ในการสร้างไฟล์ประเภท cmd สิ่งที่คุณต้องทำคือบันทึกเนื้อหาเป็น. bat เช่น

@echo
TITLE example.bat
PAUSE
taskkill/IM cmd.exe

ทำให้เป็นไฟล์ "example.bat" บันทึกจากนั้นเปิดและเรียกใช้


1

เขียนง่าย ๆ ในไฟล์ค้างคาวของคุณ

@cmd

หรือ

@cmd /k "command1&command2"

4
ขอบคุณสำหรับการ&ดำเนินการหลายคำสั่งในพรอมต์ใหม่ ฉันต้องการเพิ่มexitดังนั้นมันจึงปิดพรอมต์เมื่อคำสั่งทำงานเสร็จสิ้น
Sylhare

0

ฉันยังลองเรียกใช้ไฟล์แบตช์ที่รันกระบวนการ daemon / เซิร์ฟเวอร์เมื่อสิ้นสุดภารกิจ CCNET วิธีเดียวที่จะทำให้ CruiseControl เกิดกระบวนการอะซิงโครนัสอิสระโดยไม่ต้องรอให้สิ้นสุดกระบวนการคือ:

  1. สร้างไฟล์แบตช์เพื่อรันกระบวนการ daemon (แอ็พพลิเคชันเซิร์ฟเวอร์)
  2. ใช้ตัวกำหนดตารางเวลางานเพื่อรันไฟล์แบตช์เป็นงาน CCNET (โดยใช้ schtasks.exe)

    schtasks.exe /create /F /SC once /ST 08:50 /TN TaskName /TR "c:/path/to/batchFileName.bat"
    
    • 08:50 คือรูปแบบเวลา HH: MM

คุณอาจต้องฆ่ากระบวนการเมื่อเริ่มต้น ccnet

PS: คำตอบที่เลือกโดยใช้ "start cmd.exe" ไม่ทำงาน พรอมต์คำสั่งใหม่จะเกิดขึ้นจริง แต่ CCNET จะรอให้ cmd ที่สร้างเสร็จสิ้น

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