Arquivo BAT: Abra uma nova janela do cmd e execute um comando lá

163

Estou tentando abrir uma nova janela de comando em um arquivo BAT:

start %windir%\system32\cmd.exe

Depois de aberto, eu gostaria de executar um comando BAT na nova janela:

echo "test in new window"

Como posso fazer isso?

Tjekkles
fonte

Respostas:

263

Você já pode encontrar sua resposta, porque foi há algum tempo que você perguntou. Mas tentei fazer algo semelhante ao codificar ror. Eu queria executar o "servidor rails" em uma nova janela do cmd, para não precisar abrir um novo cmd e encontrar meu caminho novamente.

O que eu descobri foi usar o switch K assim:

start cmd /k echo Hello, World!

inicie antes de "cmd" abrir o aplicativo em uma nova janela e "/ K" executar "echo Hello, World!" após o novo cmd terminar.

Você também pode usar a opção / C para algo semelhante.

start cmd /C pause

Isso executará "pausa", mas fechará a janela quando o comando for concluído. Nesse caso, depois que você pressionou um botão. Achei isso útil para "servidor de rails"; quando desliguei meu servidor de desenvolvimento, não preciso fechar a janela depois.

aross
fonte
2
Se você estiver usando isso para executar um servidor Rails, não precisará digitar cmd. Você pode apenas digitar start rails s.
Fbonetti
86

Use o seguinte no seu arquivo em lotes:

start cmd.exe /k "more-batch-commands-here"

ou

start cmd.exe /c "more-batch-commands-here"

/ c Executa o comando especificado por sequência e finaliza
/ k Executa o comando especificado por sequência, mas permanece

Consulte a documentação do cmd.exe usando cmd /?para obter mais detalhes.

A formatação adequada da cadeia de comando fica um pouco mais complicada com espaços nos argumentos. Veja os exemplos abaixo. Observe o uso de aspas duplas aninhadas em alguns exemplos.

Exemplos:

Execute um programa e passe um parâmetro de nome de arquivo:
CMD /c write.exe c:\docs\sample.txt

Execute um programa e passe um nome de arquivo longo:
CMD /c write.exe "c:\sample documents\sample.txt"

Espaços no caminho do programa:
CMD /c ""c:\Program Files\Microsoft Office\Office\Winword.exe""

Espaços no caminho do programa + parâmetros:
CMD /c ""c:\Program Files\demo.cmd"" Parameter1 Param2
CMD /k ""c:\batch files\demo.cmd" "Parameter 1 with space" "Parameter2 with space""

Inicie demo1 e demo2:
CMD /c ""c:\Program Files\demo1.cmd" & "c:\Program Files\demo2.cmd""

Fonte: http://ss64.com/nt/cmd.html

Shannon Matthews
fonte
13

Isto não é muito fácil.

A melhor abordagem é fazer com que a parte do seu script que você deseja executar em uma "nova janela" esteja em um arquivo .bat separado. Isso pode ser impraticável se, por exemplo, você precisar de muito estado do restante do seu script (variáveis, etc). Uma opção é passar todos os valores necessários (por exemplo, dir para operar) para o arquivo em lotes:

start cmd.exe stuff.bat %this_dir%

Se você tiver uma grande quantidade de estado a transmitir, considere gerar um arquivo em lote no tempo de execução:

set foo=Hello, World
set list_me=%userprofile%

set tmpdir=c:\windows\temp
set tmp=%tmpdir%\tmp.foo

del /q /f "%tmp%"

echo.echo %foo%>>"%tmp%"
echo.dir "%list_me%">>>"%tmp"

start cmd.exe "%tmp%"

del /q /f "%tmp%"

Obviamente, este é um exemplo trivial.

sorpigal
fonte
11

As respostas acima me ajudaram. Mas ainda era necessário descobrir. Aqui está um exemplo de script que eu uso para iniciar 3 processos de desenvolvimento web. Isso resulta em três janelas abertas, pois elas precisam funcionar continuamente.

O Mongo é adicionado globalmente ao meu caminho, então não preciso fazer o cd como nos outros dois programas. É claro que o caminho para seus arquivos variará, mas espero que isso ajude.

:: Start MongoDB
start cmd.exe /k "mongod"

:: cd app directory, and start it
cd my-app
start cmd.exe /k "npm run dev"

:: cd to api server, and start that
cd ../my-app-api
start cmd.exe /k "npm run dev"
Dan Zuzevich
fonte
7

Obrigado a todos aqui no Stack Overflow; esta solução resolve a questão acima, mas é estendida para executar automaticamente estas tarefas:

  1. Eu quero executar meu servidor Rails
  2. Executar tarefas de ancinho: trabalhador para a minha gema delayed_job também
  3. e Abra o navegador de internet padrão para mostrar minha página
  4. finalmente, para deixar uma janela do cmd aberta para qualquer comando extra durante a minha sessão.

Acho que meu projeto se chama "antiquorum".

Crie um arquivo "init.bat" no diretório % USERPROFILE% (abra uma janela do cmd e dê uma olhada no caminho à esquerda do cursor para saber o que é% USERPROFILE%)

@echo off
cd C:/projects/rails3/antiquorum
if "%1" == "antiquorum" GOTO start
if "%1" == "worker" GOTO worker
if "%1" == "server" GOTO server
if "%1" == "" GOTO end
:start
    start cmd /k %USERPROFILE%\init.bat worker
    start cmd /k %USERPROFILE%\init.bat server
    TIMEOUT 30
    start "" "http://localhost:3000/"
    GOTO end
:server
    rails s
    GOTO end
:worker
    rake jobs:work
:end

Em uma nova janela da linha de comandos, digite: C:> init antiquorum

O código abre mais duas janelas cmd e um navegador. TIMEOUT evita erros no navegador.

A seção : start faz o trabalho. Você pode executar tarefas 1,2 ou 4 separadamente digitando params como: servidor , trabalhador ou nenhum para deixar um cmd aberto na raiz do projeto "antiquorum" .

Aproveitar.

Fer Padron
fonte
2

Se eu entendi que você fez isso corretamente, seu arquivo bat abrirá o prompt de comando e imprimirá sua mensagem na tela.

cmd.exe hello world

espero que isto ajude.

Chris Derry
fonte
2

para executar um arquivo python em uma nova janela do cmd com espaços no nome do arquivo:

start cmd.exe /k python "C:\Program Files\HelloWorld.py"
bracoo
fonte
0

Adicionar entre dois comandos executa os dois comandos ./k in order

Exemplo:

cmd /k echo "hello"

este comando abrirá primeiro e command promptdepois execute o echo "hello"comando

Vicky Salunkhe
fonte