Masalah saya adalah bahwa di Windows, ada jendela baris perintah yang menutup segera setelah eksekusi. Untuk mengatasi ini, saya ingin perilaku default agar jendela tetap terbuka. Biasanya, perilaku ini dapat dihindari dengan tiga metode yang muncul di benak saya:
- Menempatkan
pause
baris setelah program batch untuk meminta pengguna untuk menekan tombol sebelum keluar - Menjalankan file batch ini atau alat manipulasi baris perintah lainnya (bahkan layanan memulai, memulai ulang, dll. Dengan
net start xy
atau yang serupa) di dalamcmd.exe
(Start - Run - cmd.exe) - Menjalankan program-program ini dengan
cmd /k
seperti ini:cmd /k myprogram.bat
Tetapi ada beberapa kasus lain di mana pengguna:
- Menjalankan program pertama kali dan tidak tahu bahwa program yang diberikan akan berjalan di Command Prompt (Windows Command Processor) misalnya ketika menjalankan jalan pintas dari menu Mulai (atau dari tempat lain), ATAU
- Menemukannya sedikit tidak nyaman untuk menjalankan cmd.exe sepanjang waktu dan tidak memiliki waktu / kesempatan untuk menulis ulang kode dari perintah ini di mana-mana untuk menjeda mereka atau menghindari keluar secara eksplisit.
Saya telah membaca sebuah artikel tentang mengubah perilaku default cmd.exe
ketika membukanya secara eksplisit, dengan membuat entri AutoRun dan memanipulasi kontennya di lokasi-lokasi ini:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor\AutoRun
(Item AutoRun adalah _String values_
...)
Saya memberi cmd /d /k
nilai untuk mencobanya, tetapi ini tidak mengubah perilaku barang yang disebutkan di atas sama sekali ... Itu hanya mengubah perilaku jendela baris perintah saat membukanya secara eksplisit (Start-Run- cmd.exe).
Jadi bagaimana cara kerjanya? Bisakah Anda memberi saya ide untuk menyelesaikan masalah ini?
sumber
stdout
secara konstan yang tidak pernah dimaksudkan untuk terlihat karena alasan yang baik.Jawaban:
Saya punya solusi yang hanya bisa diterapkan pada
.cmd
dan.bat
file:Buka
regedit
dan buka masing-masing dari:Sekarang ubah "Nilai kunci default" menjadi
cmd.exe /k "%1" %*
. Sekarang, setiap jendela skrip batch akan tetap terbuka setelah eksekusi.Perhatikan bahwa ini seperti menggunakan
cmd.exe /c cmd.exe /k program.bat
, yang berarti bahwa instance CMD lain akan diluncurkan ke induk. Saya tidak dapat menemukan cara menimpa/c
argumen pertama .Anda juga dapat melakukannya dengan
[exefile]
, tetapi sekarang akan menampilkan kotak konsol kosong jika executable memiliki GUI.sumber
*
. Harap lebih berhati-hati saat mengedit!Kutip Microsoft :
Dengan kata lain, jendela konsol Win32 akan selalu ditutup ketika program terakhir yang berjalan di dalamnya keluar, dan Anda tidak dapat mengubahnya.
(Untuk program MS-DOS 16-bit, Windows menawarkan opsi "Tutup saat keluar" dalam dialog properti, tetapi ini bukan pengecualian untuk perilaku di atas: ini adalah proses NTVDM yang membuat jendela tetap terbuka. Juga, opsi ini adalah lagi per program.)
sumber
How can I do X
, bukanIn your opinion, should I do X
. Jawaban ini tidak membantu, itu menyiratkan X tidak mungkin, ketika solusi parsial telah disajikan di tempat lain. (-1)Cukup buka prompt perintah di lokasi file batch Anda, dan masukkan secara manual nama file batch Anda untuk menjalankannya di dalam jendela itu.
1.Navigate ke folder mereka di mana executable Anda
klik 2.Shift-kanan dan pilih "Command Window dari sini"
3.type dalam nama executable dan tekan enter
proses 4. harus menjalankan, tetapi jendela harus tetap terbuka
sumber
cmd.exe /k
akan memberi Anda masalah dengan beberapa batch. Jika betsexit 1
(tanpa/B
) konsol Anda akan ditutup. Triknya adalah menggunakan:Untuk menggunakan ini secara default untuk semua file batch, atur
HKEY_CLASSES_ROOT\cmdfile\shell\open\command\(default)
danHKEY_CLASSES_ROOT\batfile\shell\open\command\(default)
ke"%windir%\system32\cmd.exe" /k "%windir%\system32\cmd" /c "%1" %*
.sumber
"%*"
melewati daftar parameter lengkap, jadi bukankah ini akan melewati parameter pertama dua kali, sekali"%1"
dan lagi sebagai parameter pertama"%*"
?%1 %2 %3 ..
dan%*
yang saya tidak ingat sekarang tetapi%1 %2 %3
bekerja dalam beberapa kasus di mana%*
gagal.Saya baru saja menemukan solusi bodoh setelah membaca
grawity
jawaban.Kasing saya sedang menyiapkan lingkungan konsol di tempat kerja di mana semua solusi yang lebih masuk akal diblokir. Yang saya butuhkan adalah mengatur PATH dan mengkonfigurasi beberapa alias doskey dan dibuang ke shell.
Solusi saya (baru diuji pada Win7) sebagai tambahkan
cmd
sebagai baris terakhir dalam file batch. Ini menjalankan prompt perintah bersarang yang mewarisi lingkungan induknya. Cangkang anak itu menahan proses batch terbuka sampai Anda EXIT, di mana batch tidak memiliki proses anak dan juga keluar.sumber
Daripada menggunakan PAUSE (Saya lebih suka PILIHAN atau TIMEOUT daripada menggunakan PAUSE bila perlu), Anda dapat menggunakan solusinya di sini: 886848 / cara membuat windows-batch-file-pause-ketika-diklik dua kali .
Dengan cara ini, jika Anda mengklik file batch atau tautan (pintasan) dari dalam Windows Explorer, Anda dapat menghentikan program file batch sebelum keluar sehingga Anda dapat melihat output program dan pesan kesalahan apa pun.
Menggunakan CHOICE, Anda dapat memprogram kemampuan bagi pengguna untuk memilih berbagai tindakan yang akan diambil, dan menggunakan TIMEOUT dapat membiarkan jendela menutup setelah jeda waktu (tanpa pengawasan). Jika Anda menjalankan file batch dari dalam jendela prompt perintah, jeda ini dapat mengganggu.
Solusi tertaut akan membiarkan Anda memutuskan apakah Anda ingin melewatkan jeda jika file batch dijalankan dari jendela command prompt.
Anda dapat membaca lebih lanjut di tautan yang disediakan, tetapi dasar-dasarnya adalah bahwa ia menggunakan variabel lingkungan:
untuk menentukan apakah file batch dijalankan dari jendela perintah atau tidak.
Jadi, Anda menggunakannya seperti ini:
Pada titik di mana file batch akan keluar, Anda menambahkan beberapa kode seperti ini:
sumber
Cara terbaik yang saya temukan untuk mengatasi ini adalah dengan memanggil file batch Anda dari file batch lain menggunakan start.
jadi jika Anda biasanya menjalankan file bernama go.bat, maka Anda akan membuat file batch kedua bernama sesuatu seperti go2.bat
isi go2.bat hanya akan
jendela pertama ditutup segera, tetapi yang menjalankan go.bat Anda tetap terbuka
sumber
Ini berfungsi untuk versi 5.00 dari Windows Registry Editor.
Simpan cmds di atas dalam file yang disebut sesuatu
cmdbatfile-open.reg
dan laksanakan!sumber
Misalkan Anda memiliki dua file batch yang ingin Anda luncurkan dalam instance mereka sendiri dan tetap terbuka jika file executable mereka keluar. Mari kita panggil dua kelompok itu
A.bat
danB.bat
.Sekarang untuk kesederhanaan Anda dapat memiliki file batch untuk meluncurkan keduanya, sebut saja itu
launch_both.bat
dengan konten:Mungkin tidak berfungsi seperti yang diharapkan jika Anda memanggil
exit
salah satu dari dua file batch. Itu perlu diuji.sumber
Untuk pengguna yang menggunakan Windows 10, perhatikan bahwa tidak ada jawaban di atas yang saat ini berfungsi untuk Windows 10.
Untuk Windows 10, jika Anda memiliki akses ke skrip, Anda harus menambahkan kode berikut di akhir:
Kode itu akan menunggu input sebelum ditutup.
sumber
Menanggapi penurunan peringkat PSIXO - "Jawaban ini sudah tercakup dalam pertanyaan. - Ro Yo Mi 20 '16 pada 5:06" - TIDAK, itu BUKAN. Jawaban sebelumnya adalah: "jeda", yang TIDAK berfungsi. Jawaban PSIXO adalah: "& jeda", yang TIDAK berfungsi. Harap uraikan lebih hati-hati sebelum menurunkan versi. Saya menjalankan ini dari prompt IDLE, dan itu berhasil:
Di samping itu:
TIDAK berfungsi (prompt cmd terbalik, dan sebenarnya mengembalikan kesalahan (1)). Terima kasih kepada PSIXO untuk jawaban yang saya butuhkan. Henry.
sumber