.bat で「cmd」を使用すると正しく解決されるのはなぜですか?

.bat で「cmd」を使用すると正しく解決されるのはなぜですか?

.bat スクリプトを実行し、完了後もウィンドウをアクティブなままにする正しい方法を探しているときにcmd、2 つの一般的な方法のうちの 1 つは、スクリプトに「file.bat」がそれ自体を参照するように含めることだと知りましたcmd /k file.bat

上記の機能的な結果は理解していますが、概念的にどのように正しく実行され、解決されるのかが理解できません。

/k私の無知な推測では、それは次のように説明される議論と関係があると思います。

文字列で指定されたコマンドを実行しますが、

それでも、スクリプト自体がループしないようにできるとしても、スクリプト自体の実行が中断されないのはなぜでしょうか?

これが非常に明白なことであったり、私が基本的な何かを誤解していたり​​する場合はお詫び申し上げます。私はこのテーマに関して正式な教育や訓練を受けていません。

編集:

まあ、それは私の愚かさでした!答えを見てここ構文は私が上で示したように配置されていました...これはするスクリプトをループするので、適切なコンテキストなしで盲目的に信じる前に、実際に自分でテストするべきでした(そして、私はいつも「信頼するが検証する」と言っていますが、なんて偽善者なのでしょう

答え1

なぜ解決するのかについてはcmd、いくつかの良い説明がありますスタックオーバーフロー- は基本的にcmdと解釈され%ComSpec%、これは cmd.exe の完全な場所 ​​(通常は ) に対するシステムの環境変数ですC:\Windows\System32\cmd.exe

質問のコンテキストに関して言えば、cmd /k yourbatfile.batyourbatfile.bat 内に がある場合、ループするだけです。トラブルシューティングのためにウィンドウを開いたままにしたい場合は、ウィンドウpauseの最後または問題が発生しているセクションの後に を追加することを強くお勧めします。

の文言/kここでは少し違う「コマンド プロンプトに戻る」と書かれているので、基本的に、追加すると/kcmd.exe を開いて使用するのと同じになり、追加しないと/k実行ウィンドウからコマンドを実行するのと同じになります。

これをテストするには、「実行」を開いて実行しますipconfig /all。終了するとすぐにウィンドウが閉じますipconfigが、「実行」を開いて実行するとcmd /k ipconfig /all、ウィンドウはコマンド プロンプトに戻ります。

関連情報