Erstellen Sie ein neues cmd.exe-Fenster in einer anderen cmd.exe-Eingabeaufforderung

102

Ich bin gerade dabei, CruiseControl.NET einzurichten. Das Problem, das ich habe, ist, dass ich CC als Konsolenanwendung ausführe. Wenn mein Build erfolgreich abgeschlossen und ausgeführt wird (mithilfe von exec), wird es innerhalb der CruiseControl DOS-Eingabeaufforderung gestartet. Ich verwende nur einfache Batch-Dateien, um meine App zu starten, aber wenn sie innerhalb derselben Eingabeaufforderung wie CC ausgeführt wird, glaubt CC, dass der Build so lange fortgesetzt wird, wie meine App ausgeführt wird.

Gibt es Befehlszeilenparameter cmd.exe, die ein weiteres separates Eingabeaufforderungsfenster erzeugen?

Mark Stahler
quelle
1
cmd.exe ist eine CUI-Shell, keine GUI. Es werden keine Fenster erstellt. Es verwendet ein Konsolenfenster, das von einer Instanz von conhost.exe, dem Konsolenhostprozess, erstellt und verwaltet wird. Wenn ein CUI-Programm normal gestartet wird, erbt der Initialisierungscode in der Basisclient-DLL (kernel32.dll oder kernelbase.dll) gegebenenfalls die Konsole des übergeordneten Elements oder weist eine neue Konsole zu, es sei denn, sie wird mit dem Erstellungsflag gestartet DETACHED_PROCESS(dh ohne Konsole). . Wenn es mit dem Erstellungsflag gestartet wird CREATE_NEW_CONSOLE(wie es von CMD startverwendet wird), weist die Basis-DLL immer eine neue Konsole zu, anstatt die der übergeordneten zu erben.
Eryk Sun

Antworten:

201

Ich denke das funktioniert:

start cmd.exe
James
quelle
5
Stellen Sie sicher, dass Sie alle verschiedenen Optionen für den Start "start /?" / warte und / ich kann nützlich sein.
Peter Gfader
46
fwiw, Sie müssen nach dem Start nicht einmal 'cmd.exe' eingeben. Nur das Wort "Start" wird es tun.
JustJeff
start / d <Pfad> Für diejenigen, die den Pfad für ein neues Cmd-Fenster festlegen möchten. Hier detaillierte Beschreibung.
anton.mo
56

Hier ist der Code, den Sie benötigen:

start cmd.exe @cmd /k "Command"
xsukax
quelle
10
Was ist das @cmd? Gibt es eine Dokumentation dafür?
Michas
1
@Unterdrückt die direkte Ausgabe, die normalerweise in der Eingabeaufforderung angezeigt wird, der Befehl wird jedoch weiterhin ausgeführt.
Thielicious
Ich habe dies verwendet, es funktioniert, aber wenn Sie versuchen, das laufende Programm durch Tastaturinterrupt Strg + C zu beenden, wird das laufende Programm nicht gestoppt. Es wird nur angehalten, wenn Sie das neu geöffnete Eingabeaufforderungsfenster schließen.
Sachin G.
Funktioniert nicht für mehrzeilige Befehle mit ^. :(
Wie
32

Geben Sie einfach startdie Eingabeaufforderung ein:

start

Dies öffnet neue cmdFenster.

Esterlinkof
quelle
22
start cmd.exe 

öffnet ein separates Fenster

start file.cmd 

öffnet die Batchdatei und führt sie an einer anderen Eingabeaufforderung aus

BlackMael
quelle
2

Sie können diese 3 Befehle einfach an der Eingabeaufforderung eingeben:

  1. start

  2. start cmd

  3. start cmd.exe

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

Um einen beliebigen cmd-Dateityp zu erstellen, müssen Sie lediglich den Inhalt als .bat speichern, d. H.

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

Machen Sie daraus eine "example.bat" -Datei, speichern Sie sie, öffnen Sie sie und führen Sie sie aus.

Michael
quelle
1

Schreiben Sie einfach in Ihre Fledermausdatei

@cmd

oder

@cmd /k "command1&command2"
Bajie
quelle
4
Vielen Dank &, dass Sie in der neuen Eingabeaufforderung mehrere Befehle ausführen. Ich möchte hinzufügen, exitdamit die Eingabeaufforderung geschlossen wird, wenn der Befehl ausgeführt wurde.
Sylhare
0

Ich habe auch versucht, eine Batchdatei auszuführen, die den Dämonprozess / Server am Ende der CCNET-Aufgabe ausführt. Die einzige Möglichkeit, CruiseControl zu einem unabhängigen asynchronen Prozess zu machen, ohne auf das Ende des Prozesses zu warten, ist:

  1. Erstellen Sie eine Batchdatei, um den Daemon-Prozess auszuführen (Serveranwendung).
  2. Verwenden Sie den Taskplaner, um die Batchdatei als CCNET-Task auszuführen (mithilfe von schtasks.exe).

    schtasks.exe /create /F /SC once /ST 08:50 /TN TaskName /TR "c:/path/to/batchFileName.bat"
    
    • 08:50 ist das HH: MM-Zeitformat

Möglicherweise müssen Sie den Prozess zu Beginn von ccnet beenden

PS: Die ausgewählte Antwort mit "start cmd.exe" funktioniert nicht. Eine neue Eingabeaufforderung wird zwar erzeugt, aber CCNET wartet, bis der erzeugte Befehl beendet ist.

Drachen
quelle