"बैच जॉब (Y / N)" की पुष्टि कैसे करें?


153

Cmd में, जब हम Ctrl + C दबाते हैं, तो हम लक्ष्य एप्लिकेशन को समाप्त कर देते हैं, लेकिन यदि लक्ष्य एप्लिकेशन को बैच फ़ाइल से कॉल किया जाता है, तो हमें यह "टर्मिनेट बैच जॉब (Y / N)" पुष्टि मिलती है। मुझे एक उदाहरण कभी याद नहीं आ सकता है जहाँ मैंने बैच की नौकरी को समाप्त करने के लिए नहीं चुना था। हम इस पुष्टि को कैसे छोड़ सकते हैं?


क्या आपने कभी sgmoore के जवाब की कोशिश की? superuser.com/questions/35698/…
अर्जन

10
"मैं एक उदाहरण को कभी याद नहीं रख सकता जहाँ मैंने बैच की नौकरी को समाप्त करने का विकल्प नहीं चुना।" और वास्तव में, ज्यादातर मामलों में, नौकरी समाप्त कर दी जाती है, भले ही आप जवाब न दें ...
फीलो

@PhiLho - यह सच नहीं हो सकता है, क्योंकि मेरे प्रवेश के बाद मेरी स्क्रिप्ट हमेशा जारी रहती है N। मुझे उत्सुकता है कि आपके पास प्रवेश करने के बाद बैच लिपि कहाँ है N
डेबनहम

मैं उम्मीद कर रहा था कि यह आसान होगा, लेकिन हमेशा की तरह Microsoft ने गधे में कुछ सरल कर दिया है। नीचे दिए गए उत्तर इस मामूली झुंझलाहट से बचने के लिए सभी तरह से बहुत अधिक प्रयास कर रहे हैं। मैं सिर्फ इस बात से नाराज हूं कि इसे हल करने का कोई सरल तरीका नहीं है। गंभीरता से Microsoft, इस संकेत का क्या मतलब है? हां, मुझे यकीन है, इसीलिए मैंने Ctrl + C ...
Chev

यह समस्या कम से कम मुझे याद रखने और अधिक बार पिंग-n करने के लिए उपयोग करने के कारण है ।
पाल्सविम

जवाबों:


53

AFAIK आप इस व्यवहार के अनुसार नहीं कर सकते हैं डिजाइन और कमांड दुभाषिया द्वारा नियंत्रित किया जाता है। "मैपिंग" या यहां तक ​​कि "इंटरसेप्टिंग" की कोई विधि नहीं है जब तक कि आप सीधे दुभाषिया को डी-कंपाइल न करें और पुन: जमा न करें।


39
यह निराशाजनक है :(
श्रीकांत

हां यह निराशाजनक है। इससे भी अधिक निराशाजनक बात यह है कि BREAK कमांड, जो डिफ़ॉल्ट रूप से XP के तहत कुछ भी नहीं करता है, का उपयोग प्रॉम्प्ट को चालू करने के लिए किया जा सकता है ...
Synetech

3
हालांकि यह सच है एक अलग तरह से उपयोग करते हुए दुभाषिया व्यवहार नहीं कर सकते, हो सकता है startsgmoore तरह से सुझाव दिया superuser.com/questions/35698/... मेरे लिए एक बिल्कुल ठीक तरीके को लगता है।
अर्जन

1
यहाँ यह है: superuser.com/a/498798/56101
Totty.js

57

दो बार Ctrl+ दबाएँ C


5
यह काम नहीं करेगा, बल्कि शीघ्र दोहराता है।
जॉय

8
मैंने बस ऐसा करके अपने डेटाबेस को मार दिया! स्क्रिप्ट "विराम" पर प्रतीक्षा कर रही थी, इसलिए मैंने CTRL-C किया, और फिर प्रॉम्प्ट आया, इसलिए मैंने CTRL-C फिर से किया, और फिर बैच फ़ाइल hpilly पर चला गया, और अपने डेटाबेस को हटा दिया! @see superuser.com/questions/740004/…
सेबेस्टियन

2
यही नहीं ओपी ने पूछा। वह ^ C के बाद आसानी से "N" टाइप कर सकता था।
vladr

3
@vladr यह असीम धारण करने के लिए आसान है Ctrlऔर नल Cमार बनाम फिर Yतो Enter
निक टी

20
@SebastienDiot आपने एक स्क्रिप्ट पर एक नई तकनीक की कोशिश की जिसमें डेटा को स्थायी रूप से नष्ट करने की क्षमता थी? यही ... बहादुर।
बेसिक

57

इस साइट पर , मुझे एक प्रभावी समाधान मिला:

script2.cmd < nul

हर बार इसे टाइप न करने के लिए मैंने script.cmdऊपर की लाइन के साथ उसी फ़ोल्डर में एक दूसरी स्क्रिप्ट बनाई । मैंने केवल XP पर इस तकनीक का परीक्षण किया है, लेकिन अन्य लोगों ने विन 7 पर इसकी पुष्टि की है।

नाथन कहते हैं: एक अन्य विकल्प स्क्रिप्ट के शीर्ष पर निम्न कोड डालना है। cmd जो एक फ़ाइल में एक ही काम करता है:

rem Bypass "Terminate Batch Job" prompt.
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
)

2
यदि आप स्वयं (CALL कमांड का उपयोग किए बिना) से एक बैच फ़ाइल कहते हैं, तो निष्पादन "स्थायी रूप से" स्थानांतरित हो जाता है। यदि STDIN को NUL में पुनर्निर्देशित किया जाता है, तो कोई भी "टर्मिनेट बैच जॉब" प्रॉम्प्ट अभी भी दिखाई देगा, लेकिन इनपुट के लिए प्रतीक्षा नहीं करेगा (क्योंकि STDIN चला गया है)। यह मेरे लिए काम करता है ...
विलियम

3
यह विंडोज 7 में काम करता है
विलियम

17
यह काम करता है, जब तक कि आपको बैच में उपयोगकर्ता इनपुट की आवश्यकता नहीं है।
अगस्तो मेन

2
@William, सिर्फ स्क्रिप्ट को कॉल करना मेरे लिए काम नहीं करता था, लेकिन मैं वर्कअराउंड के साथ आया @IF ""=="%1" (@%0 CALLED < nul) ELSE (@[your command]):। खुद को पुनरावर्ती कहता है, लेकिन दूसरी बार एक तर्क के साथ। यदि आपकी स्क्रिप्ट में तर्क हैं, तो आप संभवतः पहले अप्रयुक्त स्थिति तर्क का उपयोग कर सकते हैं। यदि आपकी स्क्रिप्ट में बहुत सारे तर्क हैं, तो यह समस्याग्रस्त हो सकता है। मेरी स्क्रिप्ट को तर्क या उपयोगकर्ता इनपुट की आवश्यकता नहीं थी।
jpmc26

jpmc के जवाब ने मेरे लिए काम किया। यह डोर टर्मिनेट (y / n) को प्रतिध्वनित करता है? संदेश तब समाप्त होता है, लेकिन इसके लिए बंद नहीं होता है।
ggb667

28

क्लिंक स्थापित करें और "terminate_autoanswer" सेटिंग बदलें। सेटिंग्स फ़ाइल यहाँ होना चाहिए : C:\Users\<username>\AppData\Local\clink\settings

# name: Auto-answer terminate prompt
# type: enum
# Automatically answers cmd.exe's 'Terminate batch job (Y/N)?' prompts. 0 =
# disabled, 1 = answer 'Y', 2 = answer 'N'.
terminate_autoanswer = 1

यह तब किसी भी cmd.exe विंडो के साथ "बस काम करता है"। Cmd.exe पर पिग्गी-बैक क्लिंक करने के बाद, आपको जो चल रहा है या अन्यथा, उसे बदलने की आवश्यकता नहीं है।

फ्रिकिन का कमाल, IMO!


Cmd.exe या Console2 का उपयोग करके क्लिंक शानदार है, लेकिन यह मेरे लिए काम नहीं करता है। यह अभी भी पूछता है और यह स्वतः पूर्ण नहीं होता है।
आयनो

@tometoftom: क्या आपने उपरोक्त के रूप में सेटिंग्स फ़ाइल को बदल दिया है? मुझे यह करना था कि इसे काम करने के लिए प्राप्त करें। (ध्यान दें कि आपको विंडोज विस्टा और ऊपर की
तरफ

3
आह, अभी भी कोई पासा नहीं। गहरी आह Microsoft, भगवान के लिए ...
आयनो

3
@iono आपके पास गैर-अंग्रेजी विंडोज संस्करण है? इस मामले में
क्लिंक

3
संबंधित: cmder का उपयोग करने वालों के लिए , सेटिंग चालू है \cmder\config\settings। यहाँ से संबंधित समस्या देखें github.com/cmderdev/cmder/issues/1666
edmundo096

17

यदि आपके आवेदन के सामान्य रूप से समाप्त होने के बाद आपको बैच फ़ाइल में कुछ भी करने की आवश्यकता नहीं है, तो startकमांड का उपयोग यह सुनिश्चित करता है कि बैच फ़ाइल आपके द्वारा Ctrl-C दबाने से पहले ही समाप्त हो गई है। और इसलिए संदेश दिखाई नहीं देगा।

उदाहरण के लिए:

@ तो बंद

my_command = ping.exe सेट करें
my_params = -t www.google.com सेट करें

इको कमांड को 'स्टार्ट' द्वारा निष्पादित किया जाना है:% my_command%% my_params%

:: जब / B या / WAIT का उपयोग नहीं कर रहे हैं तो यह एक नई विंडो बनाएगा, जबकि
:: इस बहुत ही बैच फ़ाइल का निष्पादन वर्तमान विंडो में जारी रहेगा:

% my_command%% my_params% शुरू करें

गूंज।
प्रतिध्वनि इस पंक्ति को पहले ही 'आरंभ' निष्पादित किया जाएगा। तो यह
इको बैच फ़ाइल एक विंडो में Ctrl-C दबाने से पहले पूरी हो जाएगी।
गूंज।

:: "परीक्षण जारी रखने के लिए कोई भी कुंजी दबाएं" दिखाने के लिए बस 'ठहराव' के परीक्षण के लिए, देखें
:: 'गूंज' कमांड का आउटपुट। विंडो में Ctrl-C अवश्य दबाएं
:: जो 'पिंग' कमांड चलाता है (इस विंडो में नहीं)। या बस हटा दें
:: भ्रमित होने पर अगली पंक्ति:

ठहराव

(विंडोज एक्सपी पर परीक्षण किया गया।)


मुझे नहीं पता कि startक्या वास्तव में मदद मिलेगी, लेकिन यह मेरे लिए प्रशंसनीय है। तो मुझे आश्चर्य है कि अगर डाउनवोट का अर्थ है कि यह काम नहीं करेगा? या हो सकता है जिसने भी डाउनवोट किया है वह विंडोज start(या विशेष रूप से start /waitऔर start /b) कमांड को नहीं जानता है ? Microsoft.com/resources/documentation/windows/xp/all/proddocs/… तब देखें । कृपया नीचे बताएं?
अर्जन

startकाम नहीं करेगा। जब भी cmd एक बैच फ़ाइल चला रहा है, Ctrl + C टैप करने से वर्तमान में चल रही प्रक्रिया समाप्त हो जाएगी और प्रश्न दिखाएगा।
जॉय

1
+1 मेरे लिए काम करता है। हालाँकि, Ctrl + C हैंडलिंग (जो कष्टप्रद है) / b बंद हो जाता है।
निक बोल्टन

3
यदि आप बैच फ़ाइल पर डबल-क्लिक कर रहे हैं तो यह ठीक है। लेकिन क्या होगा अगर आप कंसोल में बैच फ़ाइल शुरू करते हैं?
हेलगी

8
(विंडोज 7 से बोल रहा हूं, सुनिश्चित नहीं है कि अगर XP पर लागू हो) आदेश को कोड करने के लिए माइक्रोसॉफ्ट द्वारा काम पर रखा गया बिना डिस्चार्जिंग डेवलपर ने एक ही समय में खिड़की के शीर्षक को अनिवार्य और वैकल्पिक बनाने के लिए गूंगा निर्णय लिया - बल्कि एक भ्रामक तरीके से। तो अगर कभी आपका दोहरे उद्धरणों में संलग्न है, तो यह विंडो का शीर्षक बन जाता है और कमांड बनने वाला पहला परम हो जाता है । सुरक्षित होने के लिए, उपयोग करें । ज्यादातर बस शीर्षक सेट करने के बजाय एक विकल्प या विकल्प का उपयोग न करने के लिए डेवलपर को उपयोग करें और शाप दें । start%my_command%%my_params%start "some title here" %my_command% %my_params%""/TITLE/T
ADTC

13

मैं थोड़ी देर के लिए "समाप्त बैच नौकरी" संकेत से बचने की इस इच्छा के साथ लड़ रहा हूं।

मेरा नवीनतम एपिफेनी हाथ की एक बिट (या कंसोल विंडो) का एक सा है, एक cmd.exeदूसरे के साथ एक उदाहरण को प्रतिस्थापित करके । यह कमांड / प्रोग्राम को फाइल में start cmd /kतुरंत बाद निष्पादित करके पूरा किया जाता है । exit.BAT

मूल कंसोल विंडो गायब हो जाती है और प्रतिस्थापन को सफाई के माध्यम से रोका जा सकता है Ctrl- C

निम्नलिखित के उदाहरण पर विचार करें, tracerouteजिसे Ctrl+ से बाधित किया जा सकता है C, या उपयोगकर्ता को C:\>शीघ्र वापस करने की अनुमति दी जाती है :

@echo off

set timeout=100
if not "%2"=="" set timeout=%2

start cmd /k tracert -w %timeout% %1
exit

एक नए कमांड दुभाषिया का पर्यावरण प्रतिस्थापन हर किसी के लिए नहीं हो सकता है, लेकिन, नग्न आंखों के लिए, मेरे लिए अच्छा दिखता है और काम करता है।


+1 एक बहुत ही नवीन दृष्टिकोण और यद्यपि मैं मानता हूँ कि टीआई एक सटीक प्रतिस्थापन नहीं है, यह अच्छी तरह से काम करता है (हालाँकि आपने मेरी चिंता तब की थी जब आपने "cmd.exe की जगह" के साथ अपनी पोस्ट शुरू की थी - सुरक्षा अलार्म तब तक बज रहे थे जब तक मैं उदाहरण के लिए और एहसास नहीं हो गया आपका क्या मतलब है)
मूल

आपको exit /bबैच स्क्रिप्ट से बाहर निकलने के लिए उपयोग करना चाहिए
सेबस्टियन गोडलेट

1
@ एसबेस्टियनगोडलेट: यह सामान्य रूप से अच्छी सलाह है, लेकिन यहां आशय वास्तव में (मूल) कंसोल विंडो को बंद करना है , यह देखते हुए कि लक्ष्य कमांड को एक नई विंडो में लॉन्च किया गया है ।
mklement0

"/ C" के बजाय "cmd / k" (इंटरप्रेटर को खुला रखें) का उपयोग क्यों करें? बस कमांड का आउटपुट देखने में सक्षम हो सकता है?
राउल सालिनास-मोंटेगुडो

9

ग्रिंगो का समाधान अच्छा है, लेकिन वे स्क्रिप्ट के साथ अच्छी तरह से काम नहीं करते हैं जो तर्क सूची (यानी python myscript.py %*) के साथ गुजरती हैं , क्योंकि SHIFTयह अपडेट नहीं करता है %*। कर रहे हैं समाधान है, लेकिन वे कुछ सीमाएं हैं।

यहाँ मैं संशोधन के साथ समाप्त हुआ:

IF [%JUSTTERMINATE%] == [OKAY] (
    SET JUSTTERMINATE=
    python myscript.py %*
) ELSE (
    SET JUSTTERMINATE=OKAY
    CALL %0 %* <NUL
)

99. (9)% निर्दोष।


यह काम नहीं करेगा अगर myscript.pyस्टड से पढ़ना चाहता है।
jamesdlin


0

मेरे मामले में यह ping.bat फ़ाइल थी जो कि मेरी उपयोगकर्ता निर्देशिका (C: \ Users \ in Vista या C: \ Documents and Settings \ XP) में सही थी जो कि बैच की नौकरी को अनिश्चित काल के लिए रोक रही थी।

जब भी मैं कमांड प्रॉम्प्ट से वर्तमान पंगु मेरी उपयोगकर्ता निर्देशिका है, इस बैच फ़ाइल को निष्पादित किया गया था। रन विंडो से पिंग-आईएनजी, या अन्य उपयोगकर्ता की निर्देशिका अच्छी तरह से चल रही थी।

मेरे उपयोगकर्ता डीआईआर से फ़ाइल को हटा दिया और समस्या हल हो गई!


0

काम शुरू करें, लेकिन अब बैच फ़ाइल द्वारा खोली गई विंडो को मेरे पास मौजूद विकल्पों से बदल दिया गया है और "गुण" अक्षम हैं (प्रतिक्रिया नहीं देंगे)।



0

मैं बाहर निकलने पर पैरेंट बैच के लिए ^ C फेंकने के लिए लगने वाले EXE के साथ इसमें भाग गया, जिससे एक स्वच्छ निकास पर भी "टर्मिनेट बैच जॉब" शीघ्र हो गया।

मैंने जिस समाधान का उपयोग करने के लिए चुना था, वह अन्य उत्तरों के समान "स्टार्ट" के साथ बैच चला रहा था, लेकिन यदि आप चुनते हैं तो पॉवरशेल प्रॉम्प्ट (या सीएमडी से पॉवरशेल दुभाषिया विधि के माध्यम से)।

यह अब 2018 है, और विंडोज 10 में Microsoft ने पसंदीदा कमांड प्रॉम्प्ट के रूप में PowerShell के साथ CMD को दबाना शुरू कर दिया है, इसलिए यह डिफ़ॉल्ट रूप से GUI में आसानी से उपलब्ध है।

Startस्टार्ट-प्रोसेस के लिए एक उपनाम है ।

जब चलाया जाता है, तो यह केवल लॉन्च और रिटर्न करता है। इसलिए जब आप लॉन्च की गई प्रक्रिया को रोकते हैं, तो कोई "टर्मिनेट बैच जॉब" प्रॉम्प्ट नहीं है।

डिफ़ॉल्ट रूप से यह प्रतीक्षा नहीं करता है, इसलिए कमांड से परे कोई अतिरिक्त तर्क नहीं है और यह तर्क आवश्यक है।

start mything.exe -mythings -argumentsमेरे बैच में उपयोग करना पूरी तरह से काम करता है।

PowerShell स्क्रिप्ट में लॉन्च होने के लिए उनके पथ से पहले होना चाहिए, इसलिए मैं अपनी बैच फ़ाइल के रूप में चलाता हूं .\host.bat


0

टीसीसी / एलई , जो एक नि: शुल्क सीएमडी प्रतिस्थापन है (इसे सीएमडी ++ के रूप में सोचें), के पास टर्मिनेट बैच जॉब प्रॉम्प्ट को दबाने का विकल्प है। आप TCC स्टार्टअप कॉन्फ़िगरेशन डायलॉग में विकल्प पा सकते हैं :

Ctrl-C पर बैच फ़ाइल रद्द करें: जब आप Control-C दबाते हैं, तो बिना सामान्य संकेत के बैच फ़ाइल प्रसंस्करण रद्द करें।

स्क्रीनशॉट:

टीसीसी / ले विकल्प

यदि आपने पहले कभी TCC / LE के बारे में नहीं सुना है, तो यहां साइट से कुछ धुंधला है:

TCC / LE CMD कमांड लाइन (डिफ़ॉल्ट विंडोज कमांड प्रॉम्प्ट) के लिए एक प्रतिस्थापन है। टीसीसी / ले सीएमडी का एक सुपरसेट है, जिसमें 111 आंतरिक कमांड (सीएमडी में 40 से कम), 240 आंतरिक चर और फ़ंक्शन और मौजूदा सीएमडी कमांड के सैकड़ों एन्हांसमेंट हैं।

TCC / LE आपके मौजूदा कमांड लाइन एप्लिकेशन और बैच फ़ाइलों के साथ काम करता है, लेकिन कमांड लाइन और बैच फ़ाइल क्षमताओं में प्रमुख सुधार प्रदान करता है, और आपके कमांड प्रॉम्प्ट विंडो में हजारों नई सुविधाएँ जोड़ता है।

मैंने वर्षों से TCC / LE का उपयोग किया और इससे पहले 4NT। मुझे इसके लिए बहुत प्यार मिला है और मैं इसकी सिफारिश कर सकता हूं। केवल कारण है कि मैं अभी भी इसका उपयोग नहीं करता हूं, क्योंकि मैं लगभग विशेष रूप से अब PowerShell का उपयोग करता हूं।


0

"टर्मिनेट बैच जॉब (Y / N)" को दबाने का एक प्रमुख कारण, लूप में एक प्रोग्राम चलाना है (उदाहरण के लिए यह क्रैश होने पर फिर से चलाना)।

इस https://stackoverflow.com/a/8185270/1170023 ने इस समाधान का नेतृत्व करने में मदद की:

@ECHO OFF
rem assumes you have installed pslist from sysinternals to windows PATH

:RUN
echo Starting GoldenEye Dedicated Server
start "" srcds.exe -console -game gesource +maxplayers 16 +map ge_complex

:LOOP
pslist srcds >nul 2>&1
if ERRORLEVEL 1 (
  goto RUN
) else (
  rem echo Dedicated server is still running
  timeout /t 5 >nul
  goto LOOP
)

-2

हाइपर टर्मिनल का उपयोग करने पर पुष्टि को दबाने का सबसे आसान तरीका हाइपर-यस प्लगइन जोड़ना है ।


क्यों होता है पतन? मैंने निरूपित किया है जब केवल हाइपर का उपयोग कर रहा है। इसका वास्तव में एक बढ़िया समाधान है जो मैं विंडोज़ का उपयोग करते समय उपयोग करता हूं।
रिकी बॉयस

1
सवाल cmd.exe के बारे में है।
राउल सालिनास-मोंटेगुडो

-3

अपनी स्क्रिप्ट के अंत में, बस निम्नलिखित कमांड जोड़ें:
echo
यह आपकी स्क्रिप्ट के व्यवहार को "नुकसान" नहीं करेगा, और यह सीडीएम को रोकने के लिए लगता है कि क्या आप बैच को समाप्त करना चाहते हैं।


5
मेरे लिए काम नहीं किया।
हेल्गी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.