「バッチジョブの終了(Y / N)」確認を抑制する方法


153

cmdでは、Ctrl + Cを押すとターゲットアプリケーションが終了しますが、ターゲットアプリケーションがバッチファイルから呼び出された場合、この「バッチジョブの終了(Y / N)」確認が表示されます。バッチジョブを終了しないことを選択したインスタンスを思い出すことはできません。この確認をどのようにスキップできますか?


sgmooreの答えを試したことはありますか?superuser.com/questions/35698/...
Arjan

10
「バッチジョブを終了しないことを選択したインスタンスを思い出すことはできません。」実際、ほとんどの場合、「いいえ」と答えてもジョブは終了します
...-PhiLho

@PhiLho-を入力しNた後、スクリプトは常に続行されるため、これは真実ではありません。を入力しNた後、バッチスクリプトが終了するシナリオを知りたいです。
dbenham

私はこれが簡単になることを望んでいましたが、いつものようにマイクロソフトはお尻の痛みを単純なものにしました。以下の答えはすべて、この小さな迷惑を避けるためにあまりにも多くの努力を費やしています。私はこれを解決する簡単な方法がないことにただ腹を立てています。真剣にマイクロソフト、このプロンプトのポイントは何ですか?はい、それがCtrl + Cを押す理由だと確信しています
...-Chev

この問題により、少なくとも私-nはcygwin pingのスイッチをより頻繁に覚えて使用することになります
palswim

回答:


53

この動作は設計によるものであり、コマンドインタープリターによって制御されるため、知ることはできません。インタープリターを直接逆コンパイルして再コンパイルしない限り、これを「マッピング」または「インターセプト」する方法はありません。


39
それは残念です:(
Srikanth

はい、残念です。さらに残念なことに、XPではデフォルトでは何もしないBREAKコマンドを使用してプロンプトを切り替えることができた可能性があります…
Synetech 09

3
本当かもしれませんが、インタプリタの動作を変えることはできませんが、superuser.comstart / questions / 35698 /で提案されているsgmooreのようなものを使用することは、私にとって完全に素晴らしい回避策のようです。
アルジャン

1
ここにあります
Totty.js 14

57

Ctrl+をC2回押します。


5
これは機能しませんが、プロンプトを繰り返します。
ジョーイ

8
私はそれをしてデータベースを殺しました!スクリプトは「一時停止」を待っていたので、CTRL-Cを実行し、プロンプトが表示されたので、CTRL-Cを再度実行し、バッチファイルを実行し、データベースを削除しました。@see superuser.com/questions/740004/...
セバスチャンDiot

2
それはOPが尋ねたものではありません。^ Cの後に「N」と簡単に入力できます。
vladr

3
それは無限に保持する方が簡単です@vladr CtrlとタップC打つ対再びYそれからEnter
ニックT

20
@SebastienDiotデータを永久に破壊する可能性のあるスクリプトで新しいテクニックを試しましたか?それは...勇敢です。
基本的な

57

このサイトで、私は効果的な解決策を見つけました:

script2.cmd < nul

script.cmd上記の行と同じフォルダーで呼び出される2番目のスクリプトを作成するたびにこれを入力する必要はありません。この手法はXPでのみテストしましたが、他の人はWin 7で確認しています。

Nathanは次のように付け加えます。別のオプションは、1つのファイルで同じことを行う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
)

2
(CALLコマンドを使用せずに)内部からバッチファイルを呼び出すと、実行は「永続的に」転送されます。STDINがNULにリダイレクトされた場合、「バッチジョブの終了」プロンプトは引き続き表示されますが、入力を待機しません(STDINがなくなったため)。これは...私の作品
ウィリアム・

3
これは、Windows 7で動作します
ウィリアム・

17
バッチでユーザー入力が必要な場合を除き、機能します。
アウグスト男性

2
@William、スクリプトを呼び出すだけではうまくいきませんでしたが、次善策を思い付きました@IF ""=="%1" (@%0 CALLED < nul) ELSE (@[your command])。自身を再帰的に呼び出しますが、2回目の引数を使用します。スクリプトに引数がある場合、最初の未使用の位置引数を使用する可能性があります。スクリプトに多くの引数がある場合、これは問題になる可能性があります。私のスクリプトは引数やユーザー入力を必要としませんでした。
jpmc26

jpmcの答えは私のために働いた。ターミネート(y / n)をエコーし​​ますか?ただし、その時点でメッセージは終了しますが、それで止まりません。
ggb667 14年

28

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ウィンドウで「機能する」だけです。cmd.exeでピギーバックするので、実行中のものを変更する必要はありません。

Frickin 'すごい、IMO!


Clinkは素晴らしいですが、cmd.exeまたはConsole2を使用すると、これは機能しません。まだ質問があり、自動入力されません。
イオノ

@tometoftom:上記のように設定ファイルを変更しましたか?私はそれを機能させるためにそれをしなければなりませんでした。(Windows Vista以降でファイルを正しく保存するには管理者である必要があることに注意してください...)
Macke

3
ああ、まだサイコロはありません。深いため息マイクロソフト、神のために
...-イオノ

3
@iono英語版以外のWindowsバージョンはありますか?この場合、clink
schlamar

3
関連:cmderを使用している場合、設定はon \cmder\config\settingsです。ここに関連する問題を参照してくださいgithub.com/cmderdev/cmder/issues/1666
edmundo096

17

アプリケーションが正常に終了した後、バッチファイルで何もする必要がない場合、startコマンドを使用すると、Ctrl-Cを押すまでにバッチファイルが既に終了していることが保証されます。したがって、メッセージは表示されません。

例えば:

@エコーオフ

my_command = ping.exeを設定します
my_params = -t www.google.comを設定します

'start'によって実行されるechoコマンド:%my_command%%my_params%

:: / Bまたは/ WAITを使用しない場合、新しいウィンドウが作成されますが、
::このバッチファイルの実行は現在のウィンドウで続行されます。

%my_command%%my_params%を開始します

エコー。
echoこの行は、「開始」が完了する前に実行されます。したがって、この
エコーバッチファイルは、他のウィンドウでCtrl-Cを押す前に完了します。
エコー。

::テストのために「一時停止」を使用して「続行するには任意のキーを押してください」と表示します
::「エコー」コマンドの出力。必ずウィンドウでCtrl-Cを押してください
:: 'ping'コマンドを実行します(このウィンドウではありません)。または単に削除する
::混乱した場合の次の行:

一時停止

(Windows XPでテスト済み。)


start本当に役立つかどうかはわかりませんが、私にはもっともらしい話です。だから、ダウン票がこれが機能しないことを暗示しているのだろうか?または、ダウン票を投じた人は誰でもWindows start(または特にstart /waitand start /b)コマンドを知らないのでしょうか?microsoft.com/resources/documentation/windows/xp/all/proddocs/…を参照してください。downvoteを説明してください?
アルジャン

start動作しません。cmdがバッチファイルを実行しているときは常に、Ctrl + Cをタップすると、現在実行中のプロセスが終了し、質問が表示されます。
ジョーイ

1
+1が効果的です。ただし、/ bはCtrl + C処理をオフにします(これは迷惑です)。
ニックボルトン

3
バッチファイルをダブルクリックする場合、これは問題ありません。しかし、コンソールでバッチファイルを起動するとどうなりますか?
ヘルギ

8
(Windows 7から言えば、XPに該当するかどうかはわかりません)コマンドをコーディングするためにMicrosoftに雇われた思いも寄らない開発者は、ウィンドウstartタイトルを同時に必須とオプションの両方にするという愚かな決定をしました-かなり混乱した方法で。したがって%my_command%、二重引用符で囲まれている場合、それがウィンドウのタイトルになり、最初のparam %my_params%commandになります。安全のために、を使用してくださいstart "some title here" %my_command% %my_params%。ほとんどの場合、タイトルを設定する代わりにor オプション""を使用しないために、開発者を使用して呪いをかけます。/TITLE/T
ADTC

13

しばらくの間、「バッチジョブの終了」プロンプトを回避したいという願望と戦ってきました。

私の最新のひらめきは、あるインスタンスcmd.exeを別のインスタンスに置き換えることによる、ちょっとした手(またはコンソールウィンドウ)です。これを実行するには、コマンド/プログラムを実行し、start cmd /kその後にファイルexit内ですぐに実行し.BATます。

元のコンソールウィンドウが消え、交換用のコンソールウィンドウをCtrl-できれいに停止できますC

+ tracerouteによって中断されるか、完了を許可され、ユーザーをプロンプトに戻すことができる次の例を考えてみましょう。CtrlCC:\>

@echo off

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

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

新しいコマンドインタープリターの環境置換は、すべての人に適しているわけではありませんが、肉眼では、見た目も動作も良好です。


+1非常に斬新なアプローチであり、tiが正確な代替ではないことに同意しますが、うまく機能します(「replacing cmd.exe」で投稿を開始したときに心配しましたが、例にたどり着いて気づくまでセキュリティアラームが鳴っていました)意味)
基本

exit /bバッチスクリプトを終了するために使用する必要があります
セバスチャンゴデレット

1
@SebastianGodelet:これは一般的には良いアドバイスですが、ここでは、ターゲットコマンドが新しいウィンドウで起動されることを前提に、実際には(元の)コンソールウィンドウを閉じることを意図しています。
mklement0

「/ c」の代わりに「cmd / k」(インタプリタを開いたままにする)を使用する理由 コマンドの出力を表示できるようにするだけですか?
ラウルサリナス-モンテグード

9

Gringoのソリューションは優れていますが、が更新されないpython myscript.py %*ため、引数リスト(つまり)を渡すスクリプトではうまく機能しSHIFTません%*回避策がありますが、一定の制限があります。

私が最終的に行った変更は次のとおりです。

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

99.(9)%完璧。


myscript.pystdinから読みたい場合、これは機能しません。
ジェームズリン


0

私の場合、バッチジョブを不確定に保持していたのは、ユーザーディレクトリ(VistaではC:\ Users \、XPではC:\ Documents and Settings \)にあったping.batファイルでした。

このバッチファイルは、現在のディレクトリがユーザーディレクトリであるコマンドプロンプトからpingを実行するたびに実行されました。[実行]ウィンドウまたは他のユーザーのディレクトリからのpingは正常に実行されていました。

ユーザーディレクトリからファイルを削除し、問題は解決しました!


0

起動は動作しますが、今ではバッチファイルによって開かれたウィンドウが、使用していたオプションから変更され、「プロパティ」が無効になります(応答しません)。



0

私は、終了時に親バッチに^ Cをスローするように見えるEXEでこれに遭遇し、クリーンな終了でも「バッチジョブの終了」プロンプトを表示しました。

私が使用することを選択したソリューションは、他の回答と同様に「開始」でバッチを実行することでしたが、PowerShellプロンプトから(または、必要に応じてCMDのPowerShellインタープリターメソッドを使用)。

現在は2018年であり、Windows 10では、マイクロソフトはPowerShellを優先コマンドプロンプトとしてCMDに取って代わるようになったため、既定でGUIですぐに使用できます。

StartStart-Processのエイリアスです。

実行すると、起動して戻るだけです。したがって、起動されたプロセスを停止すると、「バッチジョブの終了」プロンプトは表示されません。

デフォルトでは待機しません。そのため、コマンドとその引数以外の追加の引数は必要ありません。

start mything.exe -mythings -argumentsバッチでの使用は完全に機能しました。

PowerShellでは、起動するスクリプトのパスに先行する必要があるため、バッチファイルをとして実行します.\host.bat


0

TCC / LEは、無料のCMDの代替(CMD ++と考えてください)であり、バッチジョブの終了プロンプトを抑制するオプションがあります。TCCスタートアップコンフィギュレーションダイアログでオプションを見つけることができます:

Ctrl-Cでバッチファイルをキャンセル:Control-Cを押すと、通常のプロンプトなしでバッチファイル処理をキャンセルします。

スクリーンショット:

TCC / LEオプション

TCC / LEについて聞いたことがない場合は、サイトから次のように宣伝してください。

TCC / LEは、CMDコマンドライン(デフォルトのWindowsコマンドプロンプト)に代わるものです。TCC / LEはCMDのスーパーセットであり、111個の内部コマンド(CMDには40個未満)、240個の内部変数と機能、および既存のCMDコマンドに対する数百の機能強化があります。

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

Hyperターミナルを使用している場合に確認を抑制する最も簡単な方法は、hyper-yesプラグインを追加することです。


なぜ下票なのですか?Hyperのみを使用する場合を示しました。その実際には、Windowsを使用するときに使用する素晴らしいソリューションです。
リッキーボイス

1
質問はcmd.exeについてです。
ラウルサリナスモンテアグード

-3

スクリプトの最後に、次のコマンドを追加します。
echo
これにより、スクリプトの動作が「破損」されることはなく、CDMがバッチを終了するかどうかを尋ねるのを防ぐようです。


5
私のために働かなかった。
ヘルギ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.