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

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

Eu tenho um script em lote que basicamente quero que ele apresente ao usuário uma janela do bloco de notas aberta com um arquivo de configuração para o usuário editar cada vez que executar o script, e quero que o prompt de comando espere até que este programa seja fechado para continuar com execução e execute o programa que usa esse arquivo de configuração.

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

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

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

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

Responder1

Você poderia usar qualquer umstartcomando(observe a ordem dos /B /WAITinterruptores)

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

ou simplesmente

notepad.exe "somefile"

Conforme link acima:

GUIQuando você executa um aplicativo de interface gráfica com o usuário ( ) de 32 bits , cmdnão espera que o aplicativo seja encerrado antes de retornar ao prompt de comando.Este comportamento não ocorre se você executar o aplicativo a partir de um script de comando.

Editarno que diz respeito ao comentário de Karan:Por que /B é necessário?

/Binicia um aplicativo sem abrir uma nova janela do prompt de comando.

  • Para dizer a verdade: se você dirige umaplicativo de interface gráfica do usuárioentãonãouma nova janela do prompt de comando é aberta mesmo que a /Bopção seja omitida.
  • Por outro lado, se você executar umferramenta de linha de comando, omitir a /Bopção faz com que a ferramenta seja executada em uma nova janela do prompt de comando quefechará imediatamentedepois que chegar ao fim etoda a sua saída é perdida.

Portanto, eu uso as /B /WAITopções juntas como princípio geral: mantenha o mesmo comportamento independentemente da disposição do programa iniciado e evite pensar nisso...

Suplementona ordem dos /B /WAITinterruptorescom exemplos e mais links do StackOverflow: start /WAIT /Bnão funciona (o /waitargumento é ignorado) enquanto start /B /WAITfunciona...

Responder2

notepad.exe | echo > NUL

O que isso faz é abrir notepad.exe e toda a sua saída é redirecionada para o comando echo > NUL. Para redirecionar toda a saída, o programa deve ser finalizado. Portanto, temos que esperar até que o notepad.exe seja concluído. A saída vai para eco. O Echo não usa a entrada de forma alguma e apenas envia algo para NUL. NUL é um fluxo padrão do Windows que não leva a lugar nenhum.

Responder3

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

Seria abrir qualquer programa que eu quisesse e adicionar o comando "pause" diretamente após aquele na linha abaixo. Isso pausaria a execução do script o suficiente até que o usuário fechasse a nova janela do programa que acabou de aparecer e precisaria perceber que precisa avançar manualmente o script a partir desse ponto. A pausa 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 acredite que 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 desejo.

Responder4

Aqui está o que funcionou para mim ao iniciar o Firefox:

start "" /B /WAIT "G:\Programs\Mozilla Firefox\firefox.exe" | pause

informação relacionada