Ao procurar o método correto para executar um script .bat e manter a cmd
janela ativa após a conclusão, aprendi que um dos dois métodos populares é incluir cmd /k file.bat
no script, onde "file.bat" se refere a si mesmo.
Embora eu entenda o resultado funcional do acima, o que não consigo entender é como - conceitualmente - ele é executado e resolvido corretamente?
Pela minha própria inferência sem instrução, acho que tem algo a ver com o /k
argumento, cuja função é explicada como:
Executa o comando especificado por string, mas permanece
Ainda assim, mesmo que permita que o script evite o loop, como ele não interrompe sua própria execução?
Peço desculpas se isso é muito óbvio ou se estou entendendo mal algo fundamental, não tenho educação ou treinamento formal sobre o assunto.
EDITAR:
Bem, isso foi bobagem da minha parte! eu vi na respostaaquique a sintaxe foi organizada da maneira que indiquei acima...quefazfaça um loop no script, então eu deveria ter testado por mim mesmo antes de acreditar cegamente sem o contexto adequado (e estou sempre dizendo "confie, mas verifique", também, que hipócrita
Responder1
No que diz respeito ao porquê cmd
resolve, há algumas boas explicações emEstouro de pilha- essencialmente cmd
é interpretado como %ComSpec%
, que é a variável de ambiente do seu sistema para a localização completa do cmd.exe (geralmente C:\Windows\System32\cmd.exe
).
No que diz respeito ao contexto da sua pergunta - se você tiver cmd /k yourbatfile.bat
dentro do yourbatfile.bat, ele simplesmente entrará em loop. Se você deseja que sua janela permaneça aberta por motivos de solução de problemas, recomendo enfaticamente apenas colocar um pause
no final dela/depois de qualquer seção com a qual você esteja tendo problemas.
A redação para /k
éum pouco diferente aquijá que diz que "retorna ao prompt de comando" - essencialmente, adicionar /k
é como abrir cmd.exe e usá-lo, enquanto não /k
é como executar um comando em uma janela Executar.
Você pode testar isso abrindo Executar e executando ipconfig /all
- sua janela será fechada imediatamente após ipconfig
terminar; mas se você abrir Executar e executar cmd /k ipconfig /all
- sua janela o levará de volta a um prompt de comando.