it-swarm.asia

كيف منع تأكيد "إنهاء مهمة الدُفعات (Y / N)"؟

في cmd ، عندما نضغط على Ctrl + C ، نحصل على إنهاء التطبيق المستهدف ولكن إذا تم استدعاء التطبيق المستهدف من ملف دفعي ، نحصل على تأكيد "إنهاء مهمة الدُفعات (Y/N)". لا يمكنني أبدًا تذكر مثيل اخترت فيه عدم إنهاء المهمة الدفعية. كيف يمكننا تخطي هذا التأكيد؟

148
Srikanth

AFAIK لا يمكنك لأن هذا السلوك هو حسب التصميم والتحكم من قبل مترجم الأوامر. لا توجد طريقة "تعيين" أو حتى "اعتراض" هذا إلا إذا قمت بإلغاء ترجمة وإعادة ترجمة المترجم الفوري مباشرةً.

48
BinaryMisfit

صحافة Ctrl+C مرتين.

57
Kirill V. Lyadvinsky

في هذا الموقع ، وجدت حلاً فعالًا:

script2.cmd < nul

لكي لا تضطر إلى كتابة ذلك في كل مرة قمت فيها بإنشاء برنامج نصي ثانٍ يسمى script.cmd في نفس المجلد مع السطر أعلاه. لقد اختبرت هذه التقنية على XPفقط ، لكن آخرين أكدوها على نظام وين 7.

يضيف Nathan: خيار آخر هو وضع التعليمات البرمجية التالية في الجزء العلوي من script.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
)
54
Gringo Suave

تثبيت Clink وتغيير الإعداد "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. لا تحتاج إلى تغيير ما هو قيد التشغيل أو غير ذلك ، لأن clink-backs-backs على cmd.exe.

Frickin 'رهيبة ، المنظمة البحرية الدولية!

28
Macke

إذا لم تكن بحاجة إلى القيام بأي شيء في ملف الدُفعات بعد انتهاء التطبيق بشكل طبيعي ، فإن استخدام الأمر start يضمن الانتهاء من ملف الدُفعات بالفعل في الوقت الذي تضغط فيه على Ctrl-C. وبالتالي لن تظهر الرسالة.

فمثلا:

echo off 
 
 اضبط my_command = ping.exe 
 اضبط my_params = -t www.google.com 
 
 أمر الارتداد يتم تنفيذه بواسطة 'start':٪ my_command٪٪ my_params٪ 
 
 :: عندما لا تستخدم/B أو/WAIT ، سيؤدي ذلك إلى إنشاء نافذة جديدة ، بينما 
 :: تنفيذ هذا بالذات سيستمر الملف الدفعي في النافذة الحالية: 
 
 يبدأ٪ my_command٪٪ my_params٪ 
 
 صدى. 
 صدى سيتم تنفيذ هذا السطر قبل "البدء" حتى الانتهاء. لذا ، سيتم إكمال ملف دفعي 
 هذا قبل أن يضغط أحدهم على Ctrl-C في النافذة الأخرى. 
 الصدى. 
 
 :: فقط للاختبار استخدم "إيقاف مؤقت" لإظهار "اضغط على أي مفتاح للمتابعة" ، لرؤية 
 :: إخراج أوامر 'echo'. تأكد من الضغط على Ctrl-C في النافذة 
 :: التي تدير الأمر "ping" (ليس في هذه النافذة بالذات). أو ببساطة إزالة 
 :: السطر التالي عند الخلط: 
 
 وقفة 

(تم اختباره على نظام التشغيل Windows XP.)

17
sgmoore

لقد كنت أقاتل مع هذه الرغبة لتجنب "إنهاء دفعة وظيفة" موجه لبعض الوقت.

آخر عيد الغطاس الخاص بي هو القليل من خفة اليد (أو نافذة وحدة التحكم) ، عن طريق استبدال مثيل 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

قد لا يكون الاستعاضة عن البيئة بمترجم أوامر جديد للجميع ، ولكن بالعين المجردة ، يبدو لي ويعمل بشكل جيد بالنسبة لي.

13
ViperGeek

يعد حل Gringo جيدًا ، لكنه لا يعمل بشكل جيد مع البرامج النصية التي تمر على طول قائمة الوسيطة (أي python myscript.py %*) ، لأن SHIFT لا يقوم بتحديث %*. هناك الحلول ، ولكن لديهم قيود معينة.

إليك التعديل الذي انتهى بي الأمر:

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

99. (9) ٪ لا تشوبه شائبة.

7
Olegs Jeremejevs

راجع سؤال تجاوز سعة المكدس .

ومع ذلك ، patching cmd.exe ليس شيئًا سأفعله لذلك.

4
Joey

بدء العمل ، ولكن الآن يتم تغيير النافذة المفتوحة بواسطة ملف الدُفعات من الخيارات المتاحة لي ويتم تعطيل "الخصائص" (لن تستجيب).

0
user31480

لقد واجهت هذا الأمر مع EXE الذي بدا وكأنه يرمي ^ C إلى المجموعة الأم عند الخروج ، مما تسبب في "إنهاء الدفعة المهمة" الفوري حتى عند الخروج النظيف.

كان الحل الذي اخترت استخدامه هو تشغيل الدُفعة باستخدام "Start" ، على غرار الإجابات الأخرى ، ولكن من PowerShell Prompt (أو عبر طريقة PowerShell لمترجم من CMD ، إذا اخترت).

أصبح عام 2018 الآن ، وفي نظام التشغيل Windows 10 ، بدأت Microsoft في استبدال CMD بـ PowerShell باعتباره موجه الأوامر المفضل ، لذلك فهو متوفر بسهولة في واجهة المستخدم الرسومية ، بشكل افتراضي.

Start هو اسم مستعار لـ بدء العملية .

عند التشغيل ، يتم تشغيله وإعادته. لذلك عند إيقاف العملية التي تم إطلاقها ، لا يوجد موجه "إنهاء مهمة الدُفعات".

بشكل افتراضي ، لا تنتظر ، لذلك لا توجد وسيطات إضافية تتجاوز الأمر وسيطات مطلوبة.

باستخدام start mything.exe -mythings -arguments في دفعتي عملت تماما.

في البرامج النصية لـ PowerShell ، يجب أن يسبقها المسار المراد تشغيله ، لذلك أقوم بتشغيل ملف الدُفعات الخاص بي كـ .\Host.bat.

0
Ƭᴇcʜιᴇ007

أحد الأسباب الرئيسية لإلغاء "إنهاء مهمة الدُفعات (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
)
0
kevinf

ما عليك سوى إعادة توجيه الدفعة stdin إلى قيمة خالية عن طريق إضافة <nul إلى نهاية الأمر.

0
Il Cognato

في حالتي ، كان ملف ping.bat هو الصحيح في دليل المستخدم الخاص بي (C:\Users\in Vista أو C:\Documents and Settings\in XP) الذي كان يحتفظ بمهمة الدُفعات بشكل غير محدد.

تم تنفيذ هذا الملف الدفعي كلما ركضت ping من الأمر "موجه" حيث يكون الدليل الحالي هو دليل المستخدم الخاص بي. تنفيذ الأمر ping-ing من نافذة Run أو من دليل المستخدم الآخر جيدًا.

تمت إزالة الملف من dir الخاص بالمستخدم وتم حل المشكلة!

0
bonipet

TCC/LE ، وهو بديل CMD مجاني (فكر في أنه CMD ++) ، لديه خيار لقمع إنهاء مهمة الدُفعات الفوري. يمكنك العثور على الخيار في مربع حوار تكوين بدء التشغيل TCC :

إلغاء ملف الدُفعات على Ctrl-C : قم بإلغاء معالجة ملف الدُفعات دون المطالبة السريعة عندما تضغط على Control-C.

لقطة شاشة:

TCC/LE options

إذا لم تسمع عن TCC/LE من قبل ، فإليك بعض الأخطاء من الموقع:

يعتبر TCC/LE بديلاً لسطر أوامر CMD (موجه أوامر Windows الافتراضي). TCC/LE هي مجموعة شاملة من CMD ، مع 111 أمر داخلي (يحتوي CMD على أقل من 40) ، و 240 من المتغيرات والوظائف الداخلية ، ومئات من التحسينات على أوامر CMD الحالية.

يعمل TCC/LE مع تطبيقات سطر الأوامر الحالية والملفات الدفعية ، لكنه يقدم تحسينات كبيرة في إمكانيات سطر الأوامر وملفات الدُفعات ، ويضيف آلاف الميزات الجديدة إلى نوافذ موجه الأوامر.

اعتدت TCC/LE لسنوات و 4 NT قبل ذلك. لدي الكثير من الحب لذلك ويمكنني أن أوصي به. السبب الوحيد الذي يجعلني لا أزال أستخدمه هو أنني الآن أستخدم PowerShell تقريبًا بشكل حصري.

0
Charles Roper