Crea una nuova finestra cmd.exe dall'interno di un altro prompt di cmd.exe


102

Sto configurando CruiseControl.NET. Il problema che sto riscontrando è che sto eseguendo CC come applicazione console e quando la mia build viene completata correttamente ed eseguita (utilizzando exec), viene avviata all'interno del prompt di CruiseControl DOS. Sto solo usando semplici file batch per avviare la mia app, ma averla eseguita all'interno dello stesso prompt di CC fa sì che CC pensi che la build continui finché la mia app è in esecuzione.

Esistono parametri della riga di comando cmd.exeche generano un'altra finestra del prompt separata?


1
cmd.exe è una shell CUI, non una GUI. Non crea finestre. Utilizza una finestra della console creata e gestita da un'istanza di conhost.exe, il processo host della console. Se un programma CUI viene avviato normalmente, il codice di inizializzazione nella DLL del client di base (kernel32.dll o kernelbase.dll) eredita la console del genitore, se presente, o alloca una nuova console, a meno che non sia avviata con il flag di creazione DETACHED_PROCESS(cioè nessuna console) . Se viene avviato con il flag di creazione CREATE_NEW_CONSOLE(come startutilizza CMD ), la DLL di base alloca sempre una nuova console invece di ereditare quella genitore.
Eryk Sun

Risposte:


201

Penso che funzioni:

start cmd.exe

5
assicurati di controllare tutte le diverse opzioni per avviare "start /?" / aspetta e / posso essere utile.
Peter Gfader

46
fwiw, non è nemmeno necessario inserire "cmd.exe" dopo l'avvio. solo la parola "inizio" lo farà.
JustJeff

start / d <path> Per coloro che vogliono impostare il percorso per la nuova finestra di cmd. Qui descrizione dettagliata.
anton.mo

56

Ecco il codice che ti serve:

start cmd.exe @cmd /k "Command"

10
Cosa sta @cmdfacendo? C'è della documentazione per questo?
michas

1
@sopprime l'output diretto che normalmente verrebbe visualizzato nel prompt ma il comando verrà comunque eseguito.
Thielicious

Ho usato questo, funziona ma se provi a terminare il programma in esecuzione interrompendo la tastiera con ctrl + c, il programma in esecuzione non si ferma. Si ferma solo quando chiudi la finestra del prompt dei comandi appena aperta.
Sachin G.

Non funziona per i comandi multilinea che utilizzano ^. :( Qualche modo per affrontare questo?
user2173353

32

Digita semplicemente startnel prompt dei comandi:

start

Questo aprirà nuove cmdfinestre.


22
start cmd.exe 

apre una finestra separata

start file.cmd 

apre il file batch e lo esegue in un altro prompt dei comandi


2

Puoi semplicemente digitare questi 3 comandi dal prompt dei comandi:

  1. start

  2. start cmd

  3. start cmd.exe


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

Per creare qualsiasi tipo di file cmd, tutto ciò che devi fare è salvare il contenuto come .bat, cioè

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

Trasformalo in un file "example.bat", salvalo, quindi aprilo ed esegui.


1

semplice scrittura nel file bat

@cmd

o

@cmd /k "command1&command2"

4
Grazie per l' &esecuzione di più comandi nel nuovo prompt. Mi piace aggiungere in exitmodo che chiuda il prompt quando il comando ha terminato l'esecuzione.
Sylhare

0

Ho anche provato a eseguire un file batch che esegue il processo / server daemon alla fine dell'attività CCNET; L'unico modo per fare in modo che CruiseControl generi un processo asincrono indipendente SENZA attendere la fine del processo è:

  1. creare un file batch per eseguire il processo daemon (applicazione server)
  2. utilizzare l'utilità di pianificazione per eseguire il file batch come attività CCNET (utilizzando schtasks.exe)

    schtasks.exe /create /F /SC once /ST 08:50 /TN TaskName /TR "c:/path/to/batchFileName.bat"
    
    • 08:50 è il formato ora HH: MM

potresti dover terminare il processo all'avvio di ccnet

PS: la risposta selezionata utilizzando "start cmd.exe" non funziona; viene effettivamente generato un nuovo prompt dei comandi, ma CCNET attenderà il termine del cmd generato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.