Yanıtlar:
Java uygulaması sonlandırılmazsa (örneğin, Java uygulamasını başlatmak için toplu iş dosyasını kullanıyorsunuz), start
baş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.
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
start
Komuttur 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.
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.
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ı.
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.exe
pencere 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
&& exit
Her 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.
Deneyin:
cmd /c "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
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.
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.
nohup
en.wikipedia.org/wiki/Nohup