Toplu iş dosyası yürütüldükten sonra konsolun otomatik olarak kapatılması nasıl önlenir


510

Dosyanın yürütülmesinden sonra konsolun otomatik olarak kapanmasını önlemek için bir toplu iş dosyasının sonuna hangi komutu koyabilirim?


5
Bir .cmd dosyasının explorer'da doubleclick tarafından başlatılıp başlatılmadığını (sonunda durdurmasını istiyorsanız) veya zaten açık bir komut satırı tarafından başlatılıp başlatılmadığını tespit etmenin bir yolu varsa iyi olur. Sonraki durumda (ve özellikle başka bir program tarafından yürütüldüyse) duraklamayı istemezsiniz. Bu durum için iyi bir çözüm buldum (ve genellikle bir% NOPAUSE% değişkeni kullanın, ancak bu yalnızca paremt kabukları için değil ana programlar için çalışır).
Eckes

Yanıtlar:


635

Windows / DOS toplu iş dosyalarında:

pause

Bu hoş bir "Press any key to continue . . . "mesaj yazdırıyor

Veya "Press any key to continue . . ."mesajı istemiyorsanız bunun yerine bunu yapın:

pause >nul

14
Yarasa dosyasına çift tıklandığında buradaki önerilerin hiçbiri benim için çalışmıyor. Bu bir sunucu ortamı (ve ben komut dosyasını çalıştırmak zorunda), bu yüzden onlar davranış değiştirmiş olabilir. Bu benim amacımı değiştirmiyor. Komut penceresini açık tutmak için yazdığım hata mesajını yapabilirim.
Henrik Erlandsson

1
Evet, çevreye bağlı olarak bu her zaman işe yaramaz. Daha sağlam bir çözüm için cevabımı aşağıya bakın. Aslında set / p exitkey = "Devam etmek için herhangi bir tuşa basın ..."
Steven Mark Ford

Birisi komut dosyanızı konsol penceresi olmadan çalıştırıyorsa dikkatli olun (örneğin vbscript aracılığıyla), Görev Yöneticisi aracılığıyla onu öldürene kadar askıda kalacaktır.
Andry

Eğer maven gibi bir şey CALL kullanıyorsa, stackoverflow.com/a/52205298/4485678
Kevin Roy

duraklama burada mükemmel çalışıyor
Davidson Lima

141

Kesin soruya bağlıdır!

Normalde pausebu işi bir .bat dosyası içinde yapar .

Cmd.execmd /k dosyasının yazmaya devam edebilmesi için kapanmamasını istiyorsanız , dosyanın sonundaki komutu kullanın .


2
Windows komutlarını Çalıştır iletişim kutusundan çalıştırıyorsanız, cmd /kbunun yerine komutunuzun önüne koyun . & cmd /kçalışmaz.
Noumenon

68

Cmd.exe dosyasının kapanmamasını ve yazmaya devam edebilmesini istiyorsanız, cmd /k

Ne yaptığını netleştirme ihtiyacı hissettim /k(Windows web sitesinden):

/k : String ile belirtilen komutu yerine getirir ve devam eder.

Bu yüzden cmd /kyarasa dosyasının sonunda takip komutu olmadan sadece cmd.exepencereyi daha fazla kullanım için açık tutacaktır .

Öte yandan pause, bir toplu iş dosyasının sonunda işlemi duraklatacak ve cmd.exeilk düğmeye bastığınızda sonlandırılacaktır


24

Bir toplu iş dosyasında komut bulundurmanın aşağıdaki yolu yeni komut istemi pencerelerini açacak ve yeni pencereler otomatik olarak çıkmayacaktır.

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2

2
Benim durumumda, terminal komutunu çalıştırırken bazı hatalar yaşadım ve bu nedenle, 'duraklatma' ve 'cmd / k' komutları hatanın nedenini programı durdurmama yardımcı olmadı. Bu örnek göstermeme yardımcı oldu, hata var ve ayrıca terminalden oldukça durdu. Teşekkürler!
HowDoYouTellForAChild

19

Maven kullanıyorsanız ve yazmayı atlamak ve konsolun sonucu görmesini engellemek istiyorsanız, CALLkomut dosyasındaki komutu sadece 'mvn clean install' dışında kullanmanız gerekir .

Bunun gibi konsolu kapatacak

ECHO This is the wrong exemple
mvn clean install
pause

Bu şekilde konsol açık kalacak

ECHO This is the right exemple
CALL mvn clean install
pause

CALLKomutu kullanmazsanız , geçmişlerden hiçbiri çalışmaz.


1
Çok teşekkürler! Komut başarısız olursa istemin kapanmasını önler.
Timur Gilauri

1
Benim için çalıştı. 1 yarasa dosyasında 2 değişik komut yürütmek istedim. ama ilk komuttan sonra istemim kapatıldı. Koymak call <myCommand>bu sorunu çözdü: İlk uygulamadan sonra
istemim kapanmayı durdurdu

1
En faydalı cevap
gianmarcocalbi

14

cmd.exeYürütmek istediğiniz kodun altına yeni bir satır olarak ekleyin :

c:\Python27\python D:\code\simple_http_server.py

cmd.exe

Bu tam olarak aradığım şey, teşekkürler! "Duraklat" sadece python betiğiniz çöktüğünde çalışmayacaktır. İstediğim bir hata mesajı görmek. Şimdiye kadar python scriptlerimi konsoldan çalıştırmak zorunda kaldım
user70960

Ama bu iyi çalışıyor:python script.py %1 && cmd
user70960

Teşekkür ederim! Bu yardımcı oldu! Python uygulamalarını çalıştırmak için bir toplu iş dosyası oluşturuyordum.
fez.tival

10

yolum, işi bitirmek için gerçek bir toplu iş ("foo.bat" diyerek) yazmak; sonra başka bir "start.bat" oluşturun:

@echo off
cmd /k foo.bat

Bir kerelik ortam değişkenleri ayarladığımda bunun son derece yararlı olduğunu düşünüyorum.


1
Dosyanın cmd /ksonuna (herhangi bir komut olmadan) koyabilir foo.batve çalıştırabilirsiniz. Ayrı bir start.batdosyaya ihtiyacınız yok .
ADTC


5

Ayrıca pause.

set /p=

Kullanıcı girişini bekleyecek ve enter tuşuna basıldığında akışı serbest bırakacaktır.

veya

runas /user:# "" >nul 2>&1

kullanıcı girişinden gelen hiçbir şey görüntülenmeyecek ve komut geçmişinde kalamayacak şekilde aynısını yapacaktır.


3

Olasılık 1: Sadece 2 .bat dosyası oluşturun ve ilk dosyaya yazın:

start <filename> // name of 2nd batch file
exit

Toplu iş dosyası 2 sonunda kapanmayacak olan dosyadır. Yani şimdi parti nr.1 açtığınızda 2. başlayacak ve kendini cloe. 2. bittiğinde tamamen kapanmayacaktır (sonunda çıkış yapmayacağınız sürece)

Olasılık 2: Toplu iş dosyası 1:

call <filename>
cls
echo End of file
pause
<any code you want>

2. dosya sona erdiğinde tekrar 1. dosyaya geçecek ve geri kalanını çıktı verecektir. Bununla hata işleyicileri bile yapabilirsiniz. Nr.1 çökerse, nr.2'ye gider ve görüntüler


2

Bu küçük kesmek kullanıcıdan bir anahtar girmesini ister ve bunu% exitkey% değişkenine kaydeder (bu değişken istediğiniz gibi adlandırılabilir).

set /p exitkey= "Press any key to continue..."

Not: '=' işaretinden sonraki boşluk çok önemlidir



2

Geç kaldığımı biliyorum ama tercih ettiğim yol:

:programend
pause>nul
GOTO programend

Bu şekilde kullanıcı enter kullanarak çıkamaz.


Konsolun kapanmasını önlemenin gelişmiş bir yolu olduğu için evet diye düşünüyorum. Kullanıcı bir tuşa bassa bile konsol açık kalır. Kullanıcı yalnızca konsol penceresini kapatarak çıkmaya zorlanacaktır.
decadenza

2

Burada cevaplarla ilgili problemler yaşadım, bu yüzden benim için işe yarayan bir şey buldum:

cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause

1

Kullanım durumuna bağlı olarak bunu yapmanın iki yolu vardır

1) Windows cmd isteminin açık kalmasını istiyorsanız, yürütme sonucunu görebilir ve daha sonra kapatabilirsiniz; kullanım

pause

2) Windows cmd isteminin açık kalmasını ve bazı komut sözcüklerini çalıştırmanıza izin vermesini istiyorsanız; kullanım

cmd

resim açıklamasını buraya girin


1

Kolay, yarasa son satırına cmd ekleyin, AMA! sistem yolunuzu sıfırlar veya temizlerseniz, cmd'nizi aşağıdaki gibi tam yolla başlatmalısınız:

%windir%\system32\cmd.exe

Örneğin, jdk böyle eski sürümüne sıfırlamak için bir bat dosyası var:

PATH=C:\Program Files\Java\jdk1.6.0_45\bin;C:\apache-ant-1.7.1\bin
SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45
%windir%\system32\cmd.exe

Sistem yolunu sıfırladığımdan, cmd'yi tam yolla çalıştırmam gerektiğinden veya sistem cmd.exe'yi bulamıyor, cmd'yi çalıştıramaz ve sadece pencereyi kapatır ve hata mesajını göremezsiniz. .

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.