Dalam cmd, ketika kita menekan Ctrl + C kita mendapatkan aplikasi target dihentikan tetapi jika aplikasi target dipanggil dari file batch, kita mendapatkan konfirmasi "Hentikan pekerjaan batch (Y / N)" ini. Saya tidak pernah dapat mengingat contoh di mana saya memilih untuk tidak menghentikan pekerjaan batch. Bagaimana kita bisa melewatkan konfirmasi ini?
windows
command-line
batch
Srikanth
sumber
sumber
N
. Saya ingin tahu skenario apa yang Anda miliki di mana script batch berakhir setelah Anda masukN
.-n
sakelar untuk cygwin ping lebih sering.Jawaban:
AFAIK Anda tidak bisa karena perilaku ini dirancang dan dikendalikan oleh penerjemah perintah. Tidak ada metode "pemetaan" atau bahkan "mencegat" ini kecuali jika Anda membatalkan kompilasi dan mengkompilasi ulang penerjemah secara langsung.
sumber
start
seperti yang disarankan sgmoore di superuser.com/questions/35698/… tampaknya solusi yang sangat baik bagi saya.Tekan Ctrl+ Cdua kali.
sumber
Ctrl
dan tekanC
lagi dibandingkan memukulY
kemudianEnter
.Di situs ini , saya menemukan solusi yang efektif:
Untuk tidak harus mengetik ini setiap kali saya membuat skrip kedua disebut
script.cmd
di folder yang sama dengan baris di atas. Saya telah menguji teknik ini hanya pada XP, tetapi orang lain telah mengkonfirmasi pada Win 7.Nathan menambahkan: opsi lain adalah meletakkan kode berikut di bagian atas script.cmd yang melakukan hal yang sama dalam satu file:
sumber
@IF ""=="%1" (@%0 CALLED < nul) ELSE (@[your command])
. Panggilan itu sendiri secara rekursif, tetapi dengan argumen kedua kalinya. Jika skrip Anda memiliki argumen, Anda berpotensi menggunakan argumen posisi pertama yang tidak digunakan. Itu bisa bermasalah jika skrip Anda memiliki banyak argumen. Skrip saya tidak perlu argumen atau input pengguna.Instal Clink dan ubah pengaturan "terminate_autoanswer". Pengaturan File harus berada di sini :
C:\Users\<username>\AppData\Local\clink\settings
.Ini kemudian "hanya bekerja" dengan jendela cmd.exe. Anda tidak perlu mengubah apa yang sedang berjalan atau sebaliknya, karena denting piggy-back pada cmd.exe.
Luar biasa, IMO!
sumber
\cmder\config\settings
. Lihat masalah yang terkait di sini github.com/cmderdev/cmder/issues/1666Jika Anda tidak perlu melakukan apa pun dalam file batch setelah aplikasi Anda selesai secara normal, maka menggunakan
start
perintah memastikan bahwa file batch sudah selesai pada saat Anda menekan Ctrl-C. Dan karenanya pesan tidak akan muncul.Sebagai contoh:
(Diuji pada Windows XP.)
sumber
start
memang akan membantu, tetapi kedengarannya masuk akal bagi saya. Jadi saya ingin tahu apakah downvote menyiratkan bahwa ini TIDAK akan berhasil? Atau mungkin siapa pun yang downvoted tidak tahu perintah Windowsstart
(atau terutamastart /wait
danstart /b
)? Lihat microsoft.com/resources/documentation/windows/xp/all/proddocs/… lalu. Tolong jelaskan downvote?start
tidak akan bekerja Setiap kali cmd menjalankan file batch, mengetuk Ctrl + C akan menyebabkan proses yang sedang berjalan berakhir dan menampilkan pertanyaan.start
perintah membuat keputusan bodoh untuk membuat judul jendela wajib dan opsional pada saat yang sama - dengan cara yang agak membingungkan. Jadi jika pernah Anda%my_command%
dilampirkan dalam tanda kutip ganda, itu menjadi judul jendela dan param pertama%my_params%
menjadi perintah . Agar aman, gunakanstart "some title here" %my_command% %my_params%
. Sebagian besar hanya menggunakan""
dan mengutuk pengembang karena tidak menggunakan opsi/TITLE
atau/T
sebagai gantinya untuk menetapkan judul.Saya telah berjuang dengan keinginan ini untuk menghindari prompt "Hentikan pekerjaan batch" untuk sementara waktu.
Pencerahan terakhir saya sedikit sulap (atau jendela konsol), dengan mengganti satu instance dari yang
cmd.exe
lain. Ini dilakukan dengan mengeksekusi perintah / program melaluistart cmd /k
diikuti segera olehexit
dalam.BAT
file.Jendela konsol asli menghilang dan yang pengganti dapat dihentikan dengan bersih melalui Ctrl- C.
Pertimbangkan contoh berikut dari
traceroute
yang dapat terganggu oleh Ctrl+ C, atau diizinkan untuk menyelesaikan, mengembalikan pengguna keC:\>
prompt:Penggantian lingkungan dari juru bahasa baru mungkin bukan untuk semua orang, tetapi, dengan mata telanjang, terlihat dan bekerja dengan baik untuk saya.
sumber
exit /b
untuk keluar dari skrip batchSolusi Gringo baik, tetapi tidak bekerja dengan baik dengan skrip yang meneruskan daftar argumen (yaitu
python myscript.py %*
), karenaSHIFT
tidak diperbarui%*
. Ada beberapa solusi , tetapi mereka memiliki keterbatasan tertentu.Inilah modifikasi yang akhirnya saya dapatkan:
99. (9)% tanpa cacat.
sumber
myscript.py
ingin membaca dari stdin.Lihat pertanyaan Stack Overflow ini .
Namun, menambal cmd.exe bukanlah sesuatu yang akan saya lakukan untuk itu.
sumber
Dalam kasus saya itu adalah file ping.bat yang tepat di direktori pengguna saya (C: \ Users \ di Vista atau C: \ Documents and Settings \ di XP) yang memegang pekerjaan batch tanpa batas.
File batch ini dieksekusi setiap kali saya menjalankan ping dari command prompt di mana direktori saat ini adalah direktori pengguna saya. Ping-ing dari jendela Run, atau dari direktori pengguna lain berjalan dengan baik.
Menghapus file dari dir pengguna saya dan masalahnya teratasi!
sumber
Mulai bekerja, tetapi sekarang jendela yang dibuka oleh file batch diubah dari opsi yang saya miliki dan "properti" dinonaktifkan (tidak akan merespons).
sumber
Cukup arahkan batch stdin ke null dengan menambahkan <nul ke akhir perintah.
sumber
Saya mengalami ini dengan EXE yang tampaknya melemparkan ^ C ke batch induk saat keluar, menyebabkan prompt "Hentikan Batch Job" bahkan pada keluar yang bersih.
Solusi yang saya pilih untuk digunakan adalah menjalankan batch dengan "Mulai", mirip dengan jawaban lain, tetapi dari prompt PowerShell (atau melalui metode penerjemah PowerShell dari CMD, jika Anda memilih).
Sekarang tahun 2018, dan di Windows 10 Microsoft telah mulai mengganti CMD dengan PowerShell sebagai prompt perintah yang disukai, jadi secara default sudah tersedia di GUI, secara default.
Start
adalah alias untuk Mulai-Proses .Saat dijalankan, itu hanya meluncurkan dan kembali. Jadi, ketika Anda menghentikan proses yang diluncurkan, tidak ada prompt "Terminate Batch Job".
Secara default tidak menunggu, jadi tidak ada argumen tambahan di luar perintah dan argumen itu diperlukan.
Menggunakan
start mything.exe -mythings -arguments
dalam batch saya bekerja dengan sempurna.Dalam skrip PowerShell harus didahului oleh path mereka untuk diluncurkan, jadi saya menjalankan file batch saya sebagai
.\host.bat
.sumber
TCC / LE , yang merupakan pengganti CMD gratis (anggap sebagai CMD ++), memiliki opsi untuk menekan prompt pekerjaan batch yang diakhiri. Anda dapat menemukan opsi di Dialog Konfigurasi TCC Startup :
Tangkapan layar:
Jika Anda belum pernah mendengar tentang TCC / LE sebelumnya, berikut adalah beberapa uraian dari situs ini:
Saya menggunakan TCC / LE selama bertahun-tahun dan 4NT sebelumnya. Saya punya banyak cinta untuk itu dan dapat merekomendasikannya. Satu-satunya alasan saya masih tidak menggunakannya adalah karena saya hampir secara eksklusif menggunakan PowerShell sekarang.
sumber
Alasan utama untuk menekan "Terminate batch job (Y / N)", adalah untuk menjalankan program dalam satu lingkaran (misalnya: jalankan kembali jika macet).
Https://stackoverflow.com/a/8185270/1170023 ini membantu mengarah ke solusi ini:
sumber
Cara termudah untuk menekan konfirmasi jika Anda menggunakan terminal Hyper , adalah dengan menambahkan plugin hyper-yes .
sumber
Di akhir skrip Anda, tambahkan saja perintah berikut:
echo
Ini tidak akan "merusak" perilaku skrip Anda, dan sepertinya mencegah CDM untuk bertanya apakah Anda ingin mengakhiri batch.
sumber