Respostas:
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.
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
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.
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"
Obrigado a todos aqui no Stack Overflow; esta solução resolve a questão acima, mas é estendida para executar automaticamente estas tarefas:
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.
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.
Adicionar entre dois comandos executa os dois comandos ./k
in order
Exemplo:
cmd /k echo "hello"
este comando abrirá primeiro e command prompt
depois execute o echo "hello"
comando
cmd
. Você pode apenas digitarstart rails s
.