Toplu iş dosyası yürütüldükten sonra neden cmd çıkmıyor?


25

Toplu iş dosyası yürütüldükten sonra neden cmd çıkmıyor?

Denedim:

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

ve

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

Yanıtlar:


31

Java uygulaması sonlandırılmazsa (örneğin, Java uygulamasını başlatmak için toplu iş dosyasını kullanıyorsunuz), startbaşlatmak için komutu kullanın: -

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

Bu, java uygulamasını başlatır ve java uygulamasının bitmesini beklemeden toplu iş dosyasını yürütmeye devam eder.


20

Açıklama:

İşte nasıl çalışıyor; bir toplu iş dosyası aynı anda bir satır işlenir. Her komut sırayla yürütülür ve parti işlemcisi bir sonrakine başlamadan önce bir komutun bitmesini bekler. Karşılaştığınız sorun, başlattığınız Java uygulamasının (Jilko.jar) başlattığı satırdan sonra bile çalışmaya devam eden pencereli bir program olmasıdır. Bazı eylemleri gerçekleştiren ve ardından sonlanan bir araç olsaydı, toplu iş dosyası sonraki komuta devam ederdi (veya daha fazla yoksa). Program hala çalıştığından, toplu işlemci devam etmeden önce pencere kapanana kadar bekler. Bunu Java programından çıkarak görebilirsiniz: toplu iş dosyasını içeren konsol penceresi sonra kapanır.


Çözüm:

Düzeltmek için yapmanız gereken, toplu işlemciye programı başlatması ve beklemeden devam etmesi için talimat vermesidir:

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

As Terrance bahsedildiği , ""konsol penceresi için kullanılacak başlıktır. Ancak, yalnızca komut tırnak içinde değilse isteğe bağlıdır; aksi takdirde gereklidir . İsterseniz veya boş bırakırsanız, içine bir şey koyabilirsiniz, ancak komut tırnak içinde ise, mevcut olması gerekir, aksi halde komut yorumlayıcısı alıntılanan komutu başlık olarak kabul eder ve orada bekleyen bir konsolu açar yapılacak bir şey.

Bunun yerine aşağıdaki komutu kullanabilirsiniz, ancak kısa isimlerin her sistemde aynı olması garanti edilmediğinden alıntılar daha kolay ve daha güvenlidir.

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

startKomuttur yerleşik bir komuta yumurtlar ki (temelde Başlat menüsünden bir program çalıştırarak gibi) süreci. Öyleyse, bu bağlamda gerçekleşen şey, toplu işlemcinin start, belirtilen programı çalıştıran ve sona erdiren komutu (çalıştırılan programı değil) kendisi çalıştırmasıdır. Bu nedenle, toplu işlemci beklendiği gibi devam ediyor. Ayrıca, programı küçültülmüş ( /min) veya maksimize ( /max), düşük öncelikli ( /low) ve benzeri çalıştırma gibi yararlı olabilecek bazı seçeneklere sahiptir . Detaylar start /?için bakınız.


Biz gibi başlamak düşünün Can nohup en.wikipedia.org/wiki/Nohup
Muhammed Hewedy

Hayır. (Nohup ve & ile karşılaştırmak istemiyorsanız).
Hennes,

7

Başlattığım programların bazılarının çalışır durumda bıraktıklarını ve çalıştırılabilir pencereyi çalıştırarak çalıştırmaları halinde konsol penceresinin kapanmayacaklarını buldum.

START programı bunu düzeltir, ancak START ile olan eski sorun hala buralarda. Sadece kullanamazsınız:

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

START'ın ilk parametresi hala pencere adıdır. Bunu atlarsanız, başlatmaya çalıştığınız pencerenin bulunduğu bir CMD konsol kutusunu açmanız yeterlidir. Yukarıdaki örnekte, şimdi " c: \ my dir \ myfile.exe " pencere başlığına sahip bir konsol penceresi olacaktı . İstediğim bu değil!

Pencere adını atlamak için, aşağıdaki gibi boş bir dize tanımlamak için bir çift çift tırnak kullanın:

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

Son olarak, toplu iş dosyanızı kapattığından emin olmak için bir EXIT komutuyla sonlandırın.

Bu yöntem, Windows 7 ve 8'de tutarlı çalışıyor gibi görünüyor.

Sorun giderme için yapmak üzere olduğum şeyin bir ECHO'sunu eklememin, sonra yaptığım şeyin bir TIMEOUT öğesini eklemesinin çok yardımcı olduğunu biliyorum. Örneğin:

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

Zaman Aşımı size bir geri sayım verdiğinden, ertelemek üzere olduğunuz ECHO'ya ihtiyacınız yoktur.


5

Ayrıca - her zaman EXIT kullanarak , Windows 7'nin altında, yalnızca toplu iş dosyasının sonunun alınması, önceki Windows sürümlerinde olduğu gibi, mutlaka sona erdirmeyeceği için kullanın. Windows 7, önceki NT sürümlerinden (örneğin, Windows 2000 Professional) olduğundan daha duyarlı olabilir. Bu bazılarında bahsedilmiştir, ancak önceki cevapların hepsinde yoktur .

Cevabı desteklemek için kişisel deneyimin detayları:

StarOffice5.2 kurulumunu Windows 2000'den Windows 7'ye aktardıktan sonra, paketi sonlandırırken bellek alanı hatalarıyla karşılaşıyordum. Bu, Windows 2000'de görülmedi.

Yıllar önce, battılan dosyaları otomatik olarak yedeklemek ve geri yüklemek için soffice.ini dosyasını geri yükleyerek, bozulduğunda onarmaya izin vermek için yazdım (genellikle bir sorun olacak kadar - paket yüklenemiyor). Ancak otomatik yedekleme (toplu iş dosyasına bir bağlantıyla tetiklenen, Office52 \ user \ config \ startup içine yerleştirilmiş) ancak 5 saniyelik bir gecikmeden sonra gerçekleşir. Toplu iş dosyası çalıştırılmadan hemen önce paketten ne zaman çıktım, paketin sonlandırması hatasız gitti. Bu beni toplu iş dosyalarında bir soruna işaret etti.

'EXIT' Komutu toplu iş dosyalarına son satır olarak yerleştirildikten sonra, ofis paketi, Toplu İş Dosyalarının çalışıp çalışmadığına bakılmaksızın, her zaman bellek alanı hata mesajları olmadan sonlandırmaya başladı.


2

Uygulama tamamlandığında, çıkılması gerekir. Java uygulamasının düzgün bir şekilde çıktığından emin misiniz?


2

Ben sadece aynı problemle uğraşıyordum ve sonunda toplu iş dosyasında rastgele değişiklikler gibi görünen şeyleri yaptıktan sonra nihayet çözüldü - nedenini anlamıyorum, ancak daha sonra başkasına yardım etmesi durumunda buraya göndereceğim.

Ben faydalanmak SysInternals PsKill fayda ve uyku XP Home komut işlevsellik açısından çok içermez çünkü fayda.


Bu yapıldıktan sonra gerçekleşen toplu iş dosyası:

@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

Son birkaç satır böyle değişmiş olsaydı, köşedeki "X" i tıklatana kadar cmd penceresi açık kalırdı:

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

Ben kendisini öldürmeye PsKill çağırmaya çalıştı bile, cmd.exe süreci Görev Yöneticisi görünmez olur ve PsKill cmd.exe süreç öldürüldüğünü 's cmd.exe içinden rapor verecek, henüz cmd.exepencere hala kadar kalmak istiyorum Köşedeki 'X'i tıklattım:

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

&& exitHer satıra ekledikten sonra , bazılarının cevap verdiğini ve parti işlemlerini durduracaklarını fark ettim - diğerleri olmazdı.

Bu yüzden, yanıt verenlerden birini, orijinal olarak nasıl elde ettiğimin yerine, sonuna koydum.

Dediğim gibi, nedenini bilmiyorum, ama bunun bittiğine sevindim.


1
Bu çok gereksiz .
surfasb

ve & çıkış benim için çalışıyor
jekcom

1

Deneyin:

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


0

İşte nasıl yaptım:

  1. Aşağıdaki içeriğe sahip bir toplu iş dosyası oluşturun:

    java -Xms512M -Xmx512M -jar yourFileName.jar -o true
    EXIT
    
  2. Çıkış girişi akışınızda, şunu ekleyin:

    System.exit(1);
    

0

Windows 2003'te, Denetim Masası'nda varsayılan olarak "Kullanıcı Hesabı" yoktur. Kullanıcı Hesaplarını açmak için kısa bir toplu iş yazdım:

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

Tamam çalıştı, Kullanıcı Hesapları açıldı, ancak CMD penceresi de açık kaldı. Burada biraz araştırma yaptıktan sonra, şunu ekledim: 2. satırın başlangıcına "" START:

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

Şimdi Kullanıcı Hesapları penceresi açılıyor, açık kalıyor ve CMD penceresi kapanıyor. Basit.


0

EXIT komutu pencereyi bilinmeyen bir nedenden dolayı açık bıraktığında toplu iş dosyası penceresini kapatmak için bir çözüm arıyordum. Sonunda bir çözüme rastladım.

EXIT'i toplu iş dosyasının sonundan kaldırın ve kullanın:

Taskkill /IM conhost.exe /F

0

Windows 7 32 bitlik bir makinede net kullanımlı bir toplu iş dosyası oluşturdum ve toplu iş dosyasının cmd'si yürütmeden sonra çıkmıyor. Aynı toplu iş dosyasını başka bir Windows 7 64 bit makinede çalıştırıyorum ve toplu iş dosyasının cmd'si normal olarak çıkıyor.

Bryan'ın önerisini denedim ve bu Windows 7 32-bit makinede çalışmadı çünkü conhost.exe işlemi yoktu, bu yüzden aşağıdaki gibi değiştirdim:

Taskkill /IM cmd.exe /F

Net use toplu iş dosyası her zaman normal şekilde çıkmıyor ve "Toplu işin sonlandırılması (E / H)" onayı görünüyor Rastgele rasgele olarak gösterilir .

Bu konuya göre toplu iş dosyasını aşağıdaki gibi değiştirdim:

@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 use toplu iş dosyası sonunda normal olarak çıkar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.