Bagaimana mencegah penutupan otomatis konsol setelah eksekusi file batch

510

Perintah apa yang bisa saya letakkan di akhir file batch untuk mencegah penutupan otomatis konsol setelah eksekusi file?

joe
sumber
5
Akan lebih baik jika ada cara untuk mendeteksi jika file .cmd dimulai dengan klik dua kali di explorer (maka Anda ingin berhenti di akhir) atau jika dimulai oleh baris perintah yang sudah terbuka. Dalam kasus kemudian (dan terutama jika dijalankan oleh program lain) Anda tidak ingin jeda. Saya belum menemukan solusi yang baik untuk kasus ini (dan biasanya menggunakan variabel if NOPAUSE%, tetapi ini hanya berfungsi untuk program induk bukan untuk shell paremt).
eckes

Jawaban:

635

Dalam file batch Windows / DOS:

pause

Ini mencetak "Press any key to continue . . . "pesan yang bagus

Atau, jika Anda tidak ingin "Press any key to continue . . ."pesannya, lakukan ini sebagai gantinya:

pause >nul
Dave Bauman
sumber
14
Tidak ada saran di sini yang berfungsi untuk saya ketika mengklik dua kali file bat. Ini adalah lingkungan server (dan saya harus menjalankan skrip di dalamnya), sehingga mereka dapat mengubah perilaku. Itu tidak mengubah tujuan saya. Untuk menjaga jendela perintah terbuka sehingga saya bisa jadi pesan kesalahan itu ketik.
Henrik Erlandsson
1
Ya ini tidak selalu berhasil tergantung pada lingkungan. Untuk solusi yang lebih kuat lihat jawaban saya di bawah ini. Pada dasarnya lakukan saja set / p exitkey = "Tekan sembarang tombol untuk melanjutkan ..."
Steven Mark Ford
Hati-hati, jika seseorang menjalankan skrip Anda tanpa jendela konsol (misalnya melalui vbscript), maka skrip itu akan hang hingga Anda membunuhnya melalui Task Manager.
Andry
Jika sesuatu seperti pakar menggunakan CALL, stackoverflow.com/a/52205298/4485678
Kevin Roy
jeda bekerja dengan sempurna di sini
Davidson Lima
141

Tergantung pada pertanyaan yang tepat!

Biasanya pausemelakukan pekerjaan dalam file .bat .

Jika Anda ingin cmd.exe tidak menutup agar tetap bisa mengetik, gunakan cmd /kperintah di akhir file.

Rutger Nijlunsing
sumber
2
Jika Anda menjalankan perintah Windows melalui dialog Run, taruh cmd /ksebelum perintah Anda sebagai gantinya. & cmd /ktidak akan bekerja
Noumenon
68

Jika Anda ingin cmd.exe tidak ditutup, dan dapat terus mengetik, gunakan cmd /k

Hanya merasakan kebutuhan untuk mengklarifikasi apa yang /kdilakukannya (dari situs web windows):

/k : Melakukan perintah yang ditentukan oleh string dan melanjutkan.

Jadi cmd /ktanpa menindaklanjuti perintah di akhir file bat hanya akan cmd.exemembuka jendela untuk digunakan lebih lanjut.

Di sisi lain pausepada akhir file batch hanya akan menghentikan proses dan mengakhiri cmd.exepada tombol tekan pertama

Valentine Stone
sumber
24

Cara di bawah ini untuk memiliki perintah dalam file batch akan membuka jendela command prompt baru dan windows baru tidak akan keluar secara otomatis.

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2
pengguna6928445
sumber
2
Dalam kasus saya, saya memiliki beberapa kesalahan selama menjalankan perintah terminal, jadi, perintah 'pause' dan 'cmd / k' tidak membantu saya untuk menghentikan program karena kesalahan tersebut. Contoh ini membantu saya menunjukkan, saya memiliki kesalahan dan juga berhenti dari terminal. Terima kasih!
HowDoYouTellForAChild
20

Jika Anda menggunakan Maven dan Anda ingin melewatkan pengetikan dan mencegah konsol dari dekat untuk melihat hasil yang Anda butuhkan untuk menggunakan CALLperintah dalam skrip, selain hanya 'mvn clean install'.

Seperti ini akan menutup konsol

ECHO This is the wrong exemple
mvn clean install
pause

Seperti ini, konsol akan tetap terbuka

ECHO This is the right exemple
CALL mvn clean install
pause

Jika Anda tidak menggunakan CALLperintah tidak satu pun dari contoh masa lalu akan bekerja.

Andrey Hartung
sumber
1
Terima kasih banyak! Ini mencegah prompt menutup jika perintah gagal.
Timur Gilauri
1
Ini berhasil untuk saya. Saya ingin menjalankan 2 perintah differents dalam 1 file bat. tapi prompt saya ditutup setelah perintah pertama. Puting call <myCommand>menyelesaikan masalah ini: Prompt saya berhenti ditutup setelah eksekusi pertama
Zombkey
1
Jawaban yang paling berguna
gianmarcocalbi
14

Tambahkan cmd.exesebagai baris baru di bawah kode yang ingin Anda jalankan:

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

cmd.exe
lyfing
sumber
Ini persis apa yang saya cari, terima kasih! "Jeda" tidak akan berfungsi ketika skrip python Anda macet. Yang saya inginkan adalah melihat pesan kesalahan. Sampai sekarang saya harus menjalankan skrip python saya melalui konsol
user70960
Tapi ini berfungsi dengan baik:python script.py %1 && cmd
user70960
Terima kasih! Ini membantu! Saya sedang membuat file batch untuk menjalankan aplikasi python.
fez.tival
10

cara saya adalah menulis kumpulan aktual (mengatakan "foo.bat") untuk menyelesaikan pekerjaan; lalu buat "start.bat" lainnya:

@echo off
cmd /k foo.bat

Saya menemukan ini sangat berguna ketika saya mengatur variabel lingkungan satu kali.

Erich Chen
sumber
1
Anda bisa meletakkan cmd /k(tanpa perintah) di akhir foo.batfile dan menjalankannya. Anda tidak perlu start.batfile terpisah .
ADTC
9

Panggil cmddi akhir file batch.

pengguna4155296
sumber
5

selain itu pause.

set /p=

dapat digunakan. Ini akan mengharapkan input pengguna dan akan melepaskan aliran ketika masuk ditekan.

atau

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

yang akan melakukan hal yang sama kecuali tidak ada dari input pengguna yang akan ditampilkan atau akan tetap dalam sejarah perintah.

npocmaka
sumber
3

Kemungkinan 1: Cukup buat 2 file .bat dan tulis menjadi yang pertama:

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

File batch 2 adalah file yang tidak akan ditutup pada akhirnya. Jadi sekarang ketika Anda membuka batch nr.1. Ini akan memulai 2nd dan cloe itu sendiri. Ketika ke-2 selesai, itu tidak akan menutup sepenuhnya (selama Anda tidak akan menempatkan keluar di akhir)

Kemungkinan 2: File batch 1:

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

Ketika file ke-2 berakhir maka file 1 akan dilanjutkan lagi dan output sisanya. Dengan itu Anda bahkan dapat membuat penangan kesalahan. Jika nr.1 macet, maka masuk ke nr.2 dan menampilkannya

BlazeLP
sumber
2

Peretasan kecil ini meminta pengguna untuk memasukkan kunci dan menyimpannya ke dalam variabel% exitkey% (variabel ini bisa disebut apa pun yang Anda suka).

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

NB: spasi setelah '=' sangat penting

Steven Mark Ford
sumber
2
pause

atau

echo text to display
pause>nul
Zenedus
sumber
2

Saya tahu saya terlambat tetapi cara pilihan saya adalah:

:programend
pause>nul
GOTO programend

Dengan cara ini pengguna tidak dapat keluar menggunakan enter.

decadenza
sumber
Saya pikir ya, karena ini merupakan cara yang ditingkatkan untuk mencegah konsol menutup. Bahkan jika pengguna menekan tombol, konsol tetap terbuka. Pengguna akan dipaksa untuk keluar hanya dengan menutup jendela konsol.
decadenza
2

Ada masalah dengan jawaban di sini, jadi saya datang dengan ini, yang bekerja untuk saya (TM):

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

Ada dua cara untuk melakukannya tergantung pada use case

1) Jika Anda ingin Windows cmd prompt tetap terbuka sehingga Anda dapat melihat hasil eksekusi dan menutupnya setelah itu; menggunakan

pause

2) jika Anda ingin Windows cmd prompt tetap terbuka dan memungkinkan Anda untuk menjalankan beberapa kata penutup perintah; menggunakan

cmd

masukkan deskripsi gambar di sini

Hitesh Sahu
sumber
1

Mudah, tambahkan cmd ke baris kelelawar terakhir Anda, TETAPI! jika Anda mengatur ulang atau menghapus jalur sistem Anda, Anda harus memulai cmd Anda dengan path lengkap, seperti:

%windir%\system32\cmd.exe

Misalnya, saya punya file bat untuk mereset jdk ke versi lama seperti ini:

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

karena saya mengatur ulang path sistem, saya harus menjalankan cmd dengan path lengkap, atau sistem tidak dapat menemukan cmd.exe, itu akan gagal untuk menjalankan cmd, dan cukup tutup jendela, dan Anda tidak dapat melihat pesan kesalahan. .

Wei Kleeff
sumber