Tạo một cửa sổ cmd.exe mới từ trong một lời nhắc cmd.exe khác


102

Tôi đang trong quá trình thiết lập CruiseControl.NET. Vấn đề tôi đang gặp phải là tôi đang chạy CC dưới dạng ứng dụng bảng điều khiển và khi quá trình xây dựng của tôi hoàn tất thành công và thực thi (sử dụng tệp thi hành), nó sẽ khởi chạy nó trong lời nhắc CruiseControl DOS. Tôi chỉ đang sử dụng các tệp hàng loạt đơn giản để khởi chạy ứng dụng của mình nhưng việc nó chạy trong cùng một lời nhắc như CC khiến CC nghĩ rằng quá trình xây dựng vẫn tiếp tục miễn là ứng dụng của tôi chạy.

Có các tham số dòng lệnh cmd.exesẽ tạo ra một cửa sổ nhắc riêng biệt khác không?


1
cmd.exe là một trình bao CUI, không phải GUI. Nó không tạo cửa sổ. Nó sử dụng cửa sổ bảng điều khiển được tạo và quản lý bởi một phiên bản của conhost.exe, quy trình máy chủ bảng điều khiển. Nếu chương trình CUI được khởi động bình thường, mã khởi tạo trong DLL máy khách cơ sở (kernel32.dll hoặc kernelbase.dll) sẽ kế thừa bảng điều khiển mẹ, nếu có, hoặc phân bổ bảng điều khiển mới, trừ khi nó được bắt đầu bằng cờ tạo DETACHED_PROCESS(tức là không có bảng điều khiển) . Nếu nó được bắt đầu bằng cờ tạo CREATE_NEW_CONSOLE(như cách startsử dụng của CMD ), thì DLL cơ sở luôn phân bổ một bảng điều khiển mới thay vì kế thừa bảng điều khiển mẹ.
Eryk Sun

Câu trả lời:


201

Tôi nghĩ điều này hoạt động:

start cmd.exe

5
đảm bảo rằng bạn đã kiểm tra tất cả các tùy chọn khác nhau để bắt đầu "start /?" / chờ đợi và / tôi có thể hữu ích.
Peter Gfader 20/08/08

46
fwiw, bạn thậm chí không phải đặt 'cmd.exe' sau khi bắt đầu. chỉ cần từ 'bắt đầu' sẽ làm điều đó.
JustJeff

start / d <path> Dành cho những ai muốn thiết lập đường dẫn cho cửa sổ cmd mới. Đây mô tả chi tiết.
anton.mo

56

Đây là mã bạn cần:

start cmd.exe @cmd /k "Command"

10
Đang @cmdlàm gì vậy? Có một số tài liệu cho nó?
michas

1
@áp dụng đầu ra trực tiếp mà thường sẽ hiển thị trong dấu nhắc nhưng lệnh sẽ vẫn được thực thi.
Thielicious

Tôi đã sử dụng điều này, nó hoạt động nhưng nếu cố gắng giết chương trình đang chạy bằng cách ngắt phím Ctrl + c, chương trình đang chạy không dừng lại. Nó chỉ dừng lại khi bạn đóng cửa sổ nhắc lệnh mới mở.
Sachin G.

Không hoạt động đối với các lệnh sử dụng nhiều dòng ^. :( Có cách nào để giải quyết vấn đề này không?
user2173353 14/03/19

32

Chỉ cần gõ startvào dấu nhắc lệnh:

start

Điều này sẽ mở ra các cmdcửa sổ mới .


22
start cmd.exe 

mở một cửa sổ riêng

start file.cmd 

mở tệp lô và thực thi nó trong một dấu nhắc lệnh khác


2

Bạn chỉ có thể gõ 3 lệnh sau từ dấu nhắc lệnh:

  1. start

  2. start cmd

  3. start cmd.exe


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

Để tạo bất kỳ loại tệp cmd nào, tất cả những gì bạn phải làm là lưu nội dung dưới dạng .bat, tức là

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

Biến nó thành một tệp "example.bat", lưu nó, sau đó mở nó và chạy.


1

ghi đơn giản vào tệp dơi của bạn

@cmd

hoặc là

@cmd /k "command1&command2"

4
Cảm ơn &bạn đã thực hiện nhiều lệnh trong lời nhắc mới. Tôi muốn thêm exitđể nó đóng dấu nhắc khi lệnh chạy xong.
Sylhare

0

Tôi cũng đã thử thực thi tệp hàng loạt chạy quá trình / máy chủ daemon ở cuối tác vụ CCNET; Cách duy nhất để làm cho CruiseControl sinh ra một quy trình không đồng bộ độc lập mà KHÔNG phải đợi quá trình kết thúc là:

  1. tạo một tệp hàng loạt để chạy quy trình daemon (ứng dụng máy chủ)
  2. sử dụng bộ lập lịch tác vụ để chạy tệp loạt dưới dạng tác vụ CCNET (sử dụng schtasks.exe)

    schtasks.exe /create /F /SC once /ST 08:50 /TN TaskName /TR "c:/path/to/batchFileName.bat"
    
    • 08:50 là định dạng thời gian HH: MM

bạn có thể cần phải hủy quá trình này khi bắt đầu ccnet

Tái bút: câu trả lời đã chọn bằng cách sử dụng "start cmd.exe" không hoạt động; một dấu nhắc lệnh mới thực sự được tạo ra, nhưng CCNET sẽ đợi cmd được tạo hoàn tất.

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.