Faça com que o prompt de comando inicie um aplicativo como o Bloco de Notas e bloqueie até que ele seja fechado

3

Eu tenho um script em lote que eu quero essencialmente apresentar ao usuário com uma janela do notepad aberta com um arquivo de configuração para o usuário editar toda vez que eles rodarem o script, e eu quero que o prompt de comando espere até que este programa seja fechado para continuar com a execução e executar o programa que usa esse arquivo de configuração.

Eu quero fazer isso porque não quero usar a entrada do usuário no script Batch com o estilo de comando "set / P" e preciso configurar a análise de leitura e gravação para esse arquivo de configuração que possui muitos valores para inspecionar.

Eu acredito que o comportamento padrão no Windows ao executar qualquer programa executável, seja para arquivos "exe", ele abrirá o programa em seu próprio processo e imediatamente retornará ao prompt de comando / script. Para arquivos de script "bat" e "cmd", ele executará o script e aguardará até que o controle seja passado de volta para o primeiro script ou prompt de comando. Este deve ser o comportamento quando, pelo menos, chamar o outro script com o comando "CALL" ou chamá-lo diretamente.

Agora, no Linux, acredito que o comportamento padrão do conteúdo executável, que é um código de máquina nativo que pode vir sem uma extensão, e scripts como arquivos "sh", sejam executados de maneira bloqueante, a menos que você especifique o "e" comercial. ") em algum lugar na linha de entrada.

Portanto, estou tentando obter o comportamento de bloqueio no Windows, pois ele é mais facilmente realizado no Linux e gostaria que o fechamento do programa acionasse o script original ou retornasse o controle ao prompt de comando.

    
por Pysis 01.05.2015 / 20:09

4 respostas

5

Você pode usar o start command (anote a ordem dos /B /WAIT switches)

start "" /B /WAIT notepad.exe "somefile"

ou simplesmente

notepad.exe "somefile"

Conforme o link acima:

When you run a 32-bit graphical user interface (GUI) application, cmd does not wait for the application to quit before returning to the command prompt. This behavior does not occur if you run the application from a command script.

Editar com relação ao comentário de Karan: Por que o / B é necessário?

/B starts an application without opening a new Command Prompt window.

  • Para dizer a verdade: se você executar um aplicativo de interface gráfica com o usuário , a nenhuma nova janela do prompt de comando será aberta, mesmo que /B switch tenha sido omitida.
  • Por outro lado, se você executar uma ferramenta de linha de comando , omitir a opção /B fará com que a ferramenta seja executada em uma nova janela do Prompt de Comando que fechará imediatamente depois que ela chegar ao fim e toda a saída for perdida .

Por isso, eu uso as opções /B /WAIT juntas como uma questão de princípio geral: manter o mesmo comportamento, independentemente da disposição do programa iniciado e evitar pensar nisso ...

Suplemento na ordem de /B /WAIT alterna com exemplos e mais links do StackOverflow : start /WAIT /B não funciona (o argumento /wait é ignorado) enquanto start /B /WAIT funciona ...

    
por 01.05.2015 / 23:50
1
notepad.exe | echo > NUL

O que isto significa é que ele abre o notepad.exe e toda a sua saída é redirecionada para o comando echo > NUL . Para redirecionar toda a saída, o programa deve terminar. Portanto, temos que esperar até que o notepad.exe seja concluído. A saída vai para o eco. O eco não usa a entrada de qualquer maneira e apenas gera algo para o NUL. O NUL é um fluxo padrão do Windows que não leva a lugar nenhum.

    
por 08.07.2015 / 00:35
0

Ao escrever a pergunta, uma resposta veio a mim, embora não alcance o resultado exato que eu pretendia.

Seria para abrir qualquer programa que eu quisesse abrir, e adicionar o comando "pause" logo depois daquele na linha abaixo. Isso pausaria a execução do script até que o usuário fechasse a nova janela do programa que acabava de ser exibida e precisasse reconhecer que eles precisam avançar manualmente o script a partir desse ponto. Pausar imprime um prompt explicando o que está acontecendo para potencialmente informar o usuário (" Press any key to continue . . . ").

Este não é um grande problema, a menos que o script seja minimizado por qualquer motivo, e o usuário acredita que ele foi concluído. Também não é ótimo porque não retoma automaticamente a execução do restante do script quando o programa é fechado, que é o efeito que eu quero.

    
por 01.05.2015 / 20:10
0

A resposta simplista está no script em lote ou no prompt:

cmd / c notepad.exe somefile

    
por 01.05.2015 / 20:15