Mengapa cmd tidak keluar setelah eksekusi file batch?


23

Mengapa cmd tidak keluar setelah eksekusi file batch?

Saya telah mencoba:

"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

dan

@echo off
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
exit

Jawaban:


29

Jika aplikasi Java tidak berhenti (mis. Anda menggunakan file batch untuk meluncurkan aplikasi Java), maka gunakan start perintah untuk meluncurkannya: -

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

Ini akan meluncurkan aplikasi java dan melanjutkan mengeksekusi file batch tanpa menunggu aplikasi java selesai.


19

Penjelasan:

Inilah cara kerjanya; file batch diproses satu baris setiap kali. Setiap perintah dieksekusi secara bergantian dan prosesor batch menunggu satu perintah selesai sebelum memulai yang berikutnya. Masalah yang Anda alami adalah karena aplikasi Java yang Anda luncurkan (Jilko.jar) adalah program berjendela yang terus berjalan bahkan setelah baris yang meluncurkannya. Jika itu adalah alat yang melakukan beberapa tindakan dan kemudian berakhir, file batch akan melanjutkan ke perintah berikutnya (atau keluar jika tidak ada lagi). Karena program masih berjalan, prosesor batch menunggu hingga jendela ditutup sebelum melanjutkan. Anda dapat melihat ini dalam tindakan dengan keluar dari program Java: jendela konsol dengan file batch kemudian ditutup.


Larutan:

Apa yang perlu Anda lakukan untuk memperbaikinya, adalah menginstruksikan batch processor untuk meluncurkan program dan melanjutkan tanpa menunggu seperti itu:

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

Sebagai Terrance disebutkan , itu "" adalah judul yang digunakan untuk jendela konsol. Namun itu hanya opsional jika perintah tidak ada dalam tanda kutip; jika tidak wajib . Anda dapat meletakkan sesuatu di sana jika Anda suka atau membiarkannya kosong, tetapi jika perintah dalam tanda kutip, itu harus ada, jika tidak, penerjemah perintah akan memperlakukan perintah yang dikutip sebagai judul dan membuka konsol yang hanya duduk di sana menunggu sesuatu untuk dilakukan.

Anda dapat menggunakan sesuatu dengan perintah berikut sebagai gantinya, tetapi tanda kutip hanya lebih mudah dan aman karena nama pendek tidak dijamin sama pada setiap sistem.

start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar

Itu start perintah adalah perintah bawaan yang memunculkan proses (pada dasarnya seperti menjalankan program dari menu Mulai). Jadi apa yang terjadi dalam konteks ini adalah bahwa prosesor batch menjalankan start perintah yang pada gilirannya menjalankan program yang ditentukan dan berakhir (itu sendiri, bukan program yang muncul). Dengan demikian, prosesor batch terus berjalan seperti yang diharapkan. Ini juga memiliki beberapa opsi yang dapat bermanfaat seperti menjalankan program diminimalkan ( /min ) atau dimaksimalkan ( /max ), menjalankannya dalam prioritas rendah ( /low ) dan seterusnya. Lihat start /? untuk detail.


Bisakah kita pertimbangkan mulai suka nohup en.wikipedia.org/wiki/Nohup
Muhammad Hewedy

Tidak. (Kecuali jika Anda ingin membandingkan dengan nohup dan & amp;).
Hennes

6

Saya telah menemukan bahwa beberapa program yang saya luncurkan proses cuti berjalan, dan jendela konsol tidak akan menutup sampai mereka berhenti jika saya hanya menjalankannya dengan meluncurkan yang dapat dieksekusi.

Program START memperbaikinya, tetapi masalah lama dengan START masih ada. Anda tidak bisa hanya menggunakan:

START "c:\my dir\myfile.exe"

Parameter pertama MULAI masih nama jendela. Jika Anda menghilangkannya, Anda cukup membuka kotak konsol CMD dengan jendela bernama apa pun yang Anda coba luncurkan. Dalam contoh di atas, sekarang saya memiliki jendela konsol dengan judul jendela " c: \ my dir \ myfile.exe ". Bukan yang saya inginkan!

Untuk menghilangkan nama jendela, cukup gunakan sepasang tanda kutip ganda untuk mendefinisikan string kosong, seperti:

START "" "c:\my dir\myfile.exe"

Akhirnya, akhiri file batch Anda dengan perintah EXIT untuk memastikannya ditutup.

Metode ini tampaknya bekerja secara konsisten di Windows 7 dan 8.

Untuk pemecahan masalah, saya menemukan bahwa menambahkan ECHO tentang apa yang akan saya lakukan, kemudian TIMEOUT dari apa yang baru saja saya lakukan, sangat membantu. Sebagai contoh:

ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5

Karena Timeout memberi Anda hitungan mundur, Anda tidak perlu ECHO yang akan Anda tunda.


5

Juga - gunakan EXIT selalu, di bawah Windows 7, karena hanya sampai ke akhir file batch tidak harus menghentikannya - seperti pada versi Windows sebelumnya. Windows 7 mungkin lebih sensitif terhadap ini daripada versi NT sebelumnya (mis. Windows 2000 Professional). Ini disebutkan dalam beberapa, tapi tidak semua dari jawaban sebelumnya.

Rincian pengalaman pribadi untuk mendukung jawaban:

Setelah mentransfer instalasi StarOffice5.2 dari Windows 2000 ke Windows 7, saya mendapatkan kesalahan ruang memori setelah mengakhiri suite. Ini tidak terlihat di Windows 2000.

Bertahun-tahun yang lalu, saya telah menulis file batch untuk secara otomatis membuat cadangan dan mengembalikan soffice.ini, untuk mengizinkan perbaikan ketika menjadi rusak (seringkali cukup menjadi masalah - suite gagal memuat). Cadangan otomatis (dipicu oleh tautan ke file batch, ditempatkan di Office52 \ user \ config \ startup) hanya terjadi setelah penundaan 5 detik. Saya perhatikan setiap kali saya keluar dari suite tepat sebelum file batch berjalan, penghentian suite tersebut terjadi tanpa kesalahan. Ini menunjuk saya ke masalah dalam file batch.

Setelah perintah 'EXIT' ditempatkan sebagai baris terakhir pada file batch, office suite mulai berakhir tanpa pesan kesalahan ruang memori, setiap saat, apakah File Batch telah berjalan atau tidak.


2

Setelah aplikasi selesai, itu harus keluar. Apakah Anda yakin aplikasi Java keluar dengan benar?


2

Saya hanya berurusan dengan masalah yang sama, dan akhirnya diselesaikan dengan sendirinya setelah membuat perubahan acak ke batchfile- Saya tidak mengerti mengapa tetapi saya akan mempostingnya di sini jika itu membantu orang lain nanti.

Saya menggunakan SysInternals Pskill utilitas dan tidur utilitas karena XP Home tidak termasuk banyak dalam hal fungsi commandline.


Ini adalah file batch yang benar-benar ditutup setelah selesai:

@echo off
start /min C:\Progra~1\PsTools\pskill.exe explorer.exe
start /min C:\Progra~1\PsTools\pskill.exe Powermenu.exe
start /min C:\Progra~1\PsTools\pskill.exe PWGen.exe
start /min C:\Progra~1\PsTools\pskill.exe redshiftgui.exe
start /min C:\Progra~1\PsTools\pskill.exe clipx.exe
sleep 2
start explorer.exe
sleep 3
start C:\Progra~1\ClipX\clipx.exe
sleep 1
start C:\Progra~1\Powermenu\PowerMenu.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
start C:\Progra~1\RedshiftGUI\redshiftgui.exe && exit

Jika saya mengubah beberapa baris terakhir seperti ini, jendela cmd akan tetap terbuka sampai saya mengklik 'X' di sudut:

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe && exit

Bahkan ketika saya mencoba memanggil pskill untuk bunuh diri, proses cmd.exe akan hilang dari Task Manager, dan pskill akan melaporkan dari dalam itu cmd.exe bahwa proses cmd.exe telah terbunuh, namun cmd.exe jendela akan tetap terjaga sampai saya mengklik 'X' di sudut:

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
C:\Progra~1\PsTools\pskill.exe cmd.exe

Setelah saya tambahkan && exit untuk setiap baris, saya perhatikan beberapa dari mereka menanggapinya dan akan mengganggu pemrosesan batch - sementara yang lain tidak.

Jadi saya hanya menempatkan salah satu yang responsif di akhir daripada bagaimana saya memilikinya pada awalnya.

Seperti yang saya katakan, saya tidak tahu mengapa, tapi senang ini sudah selesai.


1
Ini adalah jadi tidak perlu .
surfasb

& amp; & amp; keluar bekerja untuk saya
jekcom

1

mencoba:

cmd /c "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar


0

Inilah cara saya melakukannya:

  1. Buat file batch dengan konten berikut:

    java -Xms512M -Xmx512M -jar yourFileName.jar -o true
    EXIT
    
  2. Dalam aliran input keluar Anda, tambahkan:

    System.exit(1);
    

0

Windows 2003 tidak memiliki "Akun Pengguna" di Panel Kontrol secara default. Saya menulis kumpulan singkat untuk membuka Akun Pengguna:

@echo off  
rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll  
exit

Ini berfungsi ON, Akun Pengguna dibuka, tetapi jendela CMD tetap terbuka juga. Setelah beberapa penelitian di sini, saya menambahkan: MULAI "" ke awal baris 2 seperti:

@echo off  
Start "" rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll o
exit

Sekarang jendela Akun Pengguna terbuka, tetap terbuka dan jendela CMD ditutup. Peasy mudah.


0

Saya telah mencari dan mencari solusi untuk menutup jendela file batch ketika perintah EXIT membiarkan jendela terbuka karena alasan yang tidak diketahui. Saya akhirnya menemukan solusi.

Hapus EXIT dari akhir file batch dan gunakan:

Taskkill /IM conhost.exe /F

0

Saya membuat file batch menggunakan net pada mesin Windows 7 32-bit dan cmd file batch tidak akan keluar setelah eksekusi. Saya menjalankan file batch yang sama pada mesin Windows 7 64-bit lain dan cmd dari file batch keluar secara normal.

Saya mencoba Saran Bryan dan tidak berfungsi pada mesin Windows 7 32-bit itu karena tidak ada proses conhost.exe jadi saya memodifikasinya sebagai berikut:

Taskkill /IM cmd.exe /F

File batch penggunaan bersih tidak selalu keluar secara normal dan itu menunjukkan konfirmasi "Hentikan pekerjaan batch (Y / T)" secara acak .

Menurut Ini benang Saya memodifikasi file batch sebagai berikut:

@echo off

if "%~1"=="-FIXED_CTRL_C" (
   REM Remove the -FIXED_CTRL_C parameter
   SHIFT
) ELSE (
   REM Run the batch with <NUL and -FIXED_CTRL_C
   CALL <NUL %0 -FIXED_CTRL_C %*
   GOTO :EOF
)

net use \\Server\folder

Taskkill /IM cmd.exe /F

Net menggunakan file batch akhirnya keluar secara normal.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.