Crie uma nova janela cmd.exe em outro prompt de cmd.exe

102

Estou configurando o CruiseControl.NET. O problema que estou tendo é que estou executando o CC como um aplicativo de console e, quando minha construção é concluída com êxito e executada (usando exec), ela é iniciada no prompt CruiseControl do DOS. Estou apenas usando arquivos em lote simples para iniciar meu aplicativo, mas executá-lo no mesmo prompt que o CC está fazendo com que o CC pense que a construção continua enquanto meu aplicativo estiver em execução.

Existem parâmetros de linha de comando para cmd.exegerar outra janela de prompt separada?

Mark Stahler
fonte
1
cmd.exe é um shell CUI, não uma GUI. Não cria janelas. Ele usa uma janela de console que é criada e gerenciada por uma instância de conhost.exe, o processo de host do console. Se um programa CUI for iniciado normalmente, o código de inicialização na DLL do cliente base (kernel32.dll ou kernelbase.dll) herda o console do pai, se houver, ou aloca um novo console, a menos que seja iniciado com o sinalizador de criação DETACHED_PROCESS(ou seja, sem console) . Se for iniciado com o sinalizador de criação CREATE_NEW_CONSOLE(como o CMD startusa), a DLL base sempre aloca um novo console em vez de herdar o do pai.
Eryk Sun

Respostas:

201

Eu acho que isso funciona:

start cmd.exe
e.James
fonte
5
certifique-se de verificar todas as diferentes opções para iniciar "iniciar /?" / espere e / eu posso ser útil.
Peter Gfader
46
fwiw, você nem mesmo precisa colocar 'cmd.exe' após o início. apenas a palavra 'iniciar' o fará.
JustJeff
start / d <path> Para aqueles que desejam definir o caminho para a nova janela cmd. Aqui descrição detalhada.
anton.mo
56

Aqui está o código de que você precisa:

start cmd.exe @cmd /k "Command"
xsukax
fonte
10
O que está @cmdfazendo? Existe alguma documentação para isso?
michas de
1
@suprime a saída direta que normalmente seria exibida no prompt, mas o comando ainda será executado.
Thielicious
Eu usei isso, ele funciona, mas se tentar matar o programa em execução interrompendo o teclado ctrl + c, o programa em execução não para. Ele só pára quando você fecha a janela do prompt de comando recém-aberta.
Sachin G.
Não funciona para comandos de várias linhas usando ^. :( Alguma maneira de lidar com isso?
user2173353
32

Basta digitar startno prompt de comando:

start

Isso abrirá novas cmdjanelas.

Esterlinkof
fonte
22
start cmd.exe 

abre uma janela separada

start file.cmd 

abre o arquivo em lote e o executa em outro prompt de comando

BlackMael
fonte
2

Você pode simplesmente digitar estes 3 comandos no prompt de comando:

  1. start

  2. start cmd

  3. start cmd.exe

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

Para criar qualquer tipo de arquivo cmd, tudo que você precisa fazer é salvar o conteúdo como .bat, ou seja,

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

Transforme-o em um arquivo "example.bat", salve-o, abra-o e execute.

Michael
fonte
1

escrever simples em seu arquivo bat

@cmd

ou

@cmd /k "command1&command2"
Bajie
fonte
4
Obrigado por &executar vários comandos no novo prompt. Eu gosto de adicionar exitpara fechar o prompt quando o comando terminar de ser executado.
Sylhare
0

Também tentei executar o arquivo em lote que executa o processo / servidor daemon no final da tarefa CCNET; A única maneira de fazer o CruiseControl gerar um processo assíncrono independente SEM esperar pelo fim do processo é:

  1. crie um arquivo em lote para executar o processo daemon (aplicativo de servidor)
  2. usar o agendador de tarefas para executar o arquivo em lote como tarefa CCNET (usando schtasks.exe)

    schtasks.exe /create /F /SC once /ST 08:50 /TN TaskName /TR "c:/path/to/batchFileName.bat"
    
    • 08:50 é o formato de hora HH: MM

você pode precisar interromper o processo no início da ccnet

PS: a resposta selecionada usando "start cmd.exe" não funciona; um novo prompt de comando é realmente gerado, mas o CCNET irá esperar que o cmd gerado termine.

pipa
fonte