バッチファイルの実行後にコンソールが自動的に閉じないようにする方法


510

ファイルの実行後にコンソールが自動的に閉じるのを防ぐために、バッチファイルの最後にどのコマンドを置くことができますか?


5
.cmdファイルがエクスプローラーでダブルクリックして開始された(最後に一時停止させたい)か、すでに開いているコマンドラインで開始されたかを検出する方法があると便利です。後者の場合(特に別のプログラムによって実行された場合)、一時停止は必要ありません。私はこの場合の適切な解決策を見つけていません(通常、if%NOPAUSE%変数を使用しますが、これは親プログラムでのみ機能し、paremtシェルでは機能しません)。
eckes

1
方法があります:stackoverflow.com/questions/3551888/...
EM0

回答:


635

Windows / DOSバッチファイル:

pause

これは素晴らしい"Press any key to continue . . . "メッセージを出力します

または、"Press any key to continue . . ."メッセージが必要ない場合は、代わりに次のようにします。

pause >nul

14
batファイルをダブルクリックしても、ここでの提案は機能しません。これはサーバー環境であるため(スクリプトを実行する必要があります)、動作が変更された可能性があります。それでも私の目標は変わりません。コマンドウィンドウを開いたままにして、入力するエラーメッセージを表示できるようにします。
Henrik Erlandsson、2016年

1
ええ、これは環境によっては常に機能するとは限りません。より堅牢なソリューションについては、以下の私の回答を参照してください。基本的には/ p exitkey = "続行するには任意のキーを押してください..."を実行してください
スティーブンマークフォード

誰かがコンソールウィンドウなしで(たとえば、vbscriptを介して)スクリプトを実行すると、タスクマネージャーを使用してスクリプトを強制終了するまでハングします。
Andry

mavenのようなものがCALLを使用する場合、stackoverflow.com
Kevin Roy

ここで一時停止は完全に機能します
Davidson Lima

141

正確な質問によります!

通常pause.batファイル内でジョブを実行します。

あなたがしたい場合はcmd.exeのではない近くには、タイピング、使用のままにできるようにするにはcmd /k、ファイルの末尾にコマンド。


2
実行ダイアログからWindowsコマンドを実行している場合は、cmd /k代わりにコマンドの前に置きます。& cmd /k動作しません。
Noumenon

68

cmd.exeを閉じずに、続けて入力できるようにするには、次を使用します。 cmd /k

何をするかを明確にする必要性を感じました/k(Windows Webサイトから):

/k :stringで指定されたコマンドを実行して続行します。

したがってcmd /k、batファイルの最後にフォローアップコマンドがないと、cmd.exeウィンドウは開いたままになり、後で使用できます。

一方pause、バッチファイルの最後では、プロセスを一時停止し、cmd.exe最初のボタンを押すと終了します


24

コマンドをバッチファイルに含める以下の方法では、新しいコマンドプロンプトウィンドウが開き、新しいウィンドウは自動的に終了しません。

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2

2
私の場合、ターミナルコマンドの実行中にエラーが発生したため、「一時停止」コマンドと「cmd / k」コマンドを使用しても、エラーの原因であるプログラムを停止できませんでした。この例は私が示すのに役立ちました、私にはエラーがあり、端末からかなり停止しました。ありがとう!
HowDoYouTellForAChild 2018年

19

Mavenを使用していて、入力をスキップし、コンソールが閉じて結果を表示しないようにする場合はCALL、「mvn clean install」だけでなく、スクリプトでコマンドを使用する必要があります。

このようにコンソールを閉じます

ECHO This is the wrong exemple
mvn clean install
pause

このようにコンソールは開いたままになります

ECHO This is the right exemple
CALL mvn clean install
pause

CALLコマンドを使用しない場合、過去の例はどちらも機能しません。


1
どうもありがとう!コマンドが失敗した場合にプロンプ​​トが閉じないようにします。
Timur Gilauri、

1
それは私のために働いた。1つのbatファイルで2つの異なるコマンドを実行したいと思いました。しかし、最初のコマンドの後にプロンプ​​トが閉じました。入れてcall <myCommand>この問題を解決:最初の実行後に私のプロンプト立ち止まっ閉鎖
Zombkey

1
最も有用な回答
ジャンマルコカルビ

14

cmd.exe実行するコードの下に新しい行を追加します。

c:\Python27\python D:\code\simple_http_server.py

cmd.exe

これはまさに私が探していたものです、ありがとう!Pythonスクリプトがクラッシュした場合、「一時停止」は機能しません。私が欲しかったのはエラーメッセージを見ることです。これまでは、コンソールからPythonスクリプトを実行する必要がありました
user70960

:しかし、これは正常に動作しますpython script.py %1 && cmd
user70960

ありがとうございました!これは役に立ちました!Pythonアプリケーションを実行するためのバッチファイルを作成していました。
fez.tival

10

私の方法は、実際のバッチ( "foo.bat"など)を記述してジョブを完了することです。次に、別の「start.bat」を作成します。

@echo off
cmd /k foo.bat

これは、1回限りの環境変数を設定するときに非常に便利です。


1
ファイルcmd /kの最後に(コマンドなしで)置くだけfoo.batで実行できます。別のstart.batファイルは必要ありません。
ADTC、2017年


5

以外にも pause

set /p=

使用できます。ユーザー入力を想定し、Enterキーを押すとフローを解放します。

または

runas /user:# "" >nul 2>&1

ユーザー入力から何も表示されず、コマンド履歴にも残りませんが、同じことを行います。


3

可能性1:2つの.batファイルを作成し、最初のファイルに書き込むだけです。

start <filename> // name of 2nd batch file
exit

バッチファイル2は、最後に閉じないファイルです。したがって、バッチnr.1を開くと、2番目とクロー自体が開始されます。2番目が終了しても、完全に閉じません(最後に出口を配置しない限り)。

可能性2:バッチファイル1:

call <filename>
cls
echo End of file
pause
<any code you want>

2番目のファイルが終了すると、ファイル1に再び進み、残りのファイルを出力します。これにより、エラーハンドラーを作成することもできます。nr.1がクラッシュすると、nr.2に入り、それを表示します


2

この小さなハックは、ユーザーにキーを入力するように求め、それを変数%exitkey%に格納します(この変数は好きな名前にすることができます)。

set /p exitkey= "Press any key to continue..."

注意:「=」の後のスペースは非常に重要です



2

私は遅れていることを知っていますが、私の優先する方法は次のとおりです。

:programend
pause>nul
GOTO programend

この方法では、ユーザーはEnterキーを使用して終了できません。


コンソールが閉じないようにするための拡張された方法であるため、そうだと思います。ユーザーがキーを押しても、コンソールは開いたままです。ユーザーは、コンソールウィンドウを閉じるだけで強制的に終了します。
Decadenza

2

ここでの答えに問題があったので、私はこれを思いつきました、それは私のために機能します(TM):

cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause

1

ユースケースによって2つの方法があります

1)Windows cmdプロンプトを開いたままにして、実行結果を確認して後で閉じることができるようにする場合。使用する

pause

2)Windows cmdプロンプトを開いたままにして、コマンドのあとにいくつかのコマンドを実行できるようにする場合。使用する

cmd

ここに画像の説明を入力してください


1

簡単です、バットの最後の行にcmdを追加してください。システムパスをリセットまたはクリアする場合は、次のようにフルパスでcmdを開始する必要があります。

%windir%\system32\cmd.exe

たとえば、jdkを次のように古いバージョンにリセットするbatファイルがあります。

PATH=C:\Program Files\Java\jdk1.6.0_45\bin;C:\apache-ant-1.7.1\bin
SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45
%windir%\system32\cmd.exe

システムパスをリセットしたので、フルパスでcmdを実行する必要があります。そうしないと、システムがcmd.exeを見つけられず、cmdの実行に失敗し、ウィンドウを閉じるだけで、エラーメッセージが表示されません。 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.