windows – “バッチジョブの終了(Y/N) “確認を抑制する方法は?

batch command-line windows

cmdでは、Ctrl+Cを押すと対象のアプリケーションが終了するのですが、バッチファイルから対象のアプリケーションが呼び出されると、この「バッチジョブの終了(Y/N)」という確認が出てきます。私はバッチジョブを終了しないことを選択したインスタンスを覚えていません。この確認をスキップするにはどうすればいいのでしょうか?

  174  Srikanth  2009-09-04


ベストアンサー

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

61  BinaryMisfit  2009-09-04


Ctrl+Cを2回押します

63  Kirill V. Lyadvinsky  2009-09-04


このサイトで、有効な解決策を見つけました

script2.cmd < nul

これを毎回入力しなくても済むように、同じフォルダにscript.cmdという名前のスクリプトを作りました。この方法はXPのみでテストしましたが、他の人がWin 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
)

63  Gringo Suave  2012-11-03


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はcmd.exeのピギーバックスなので、実行中のものを変更したりする必要はありません

驚くべきことに、IMO!

36  Macke  2013-04-03


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

For example:

@echo off

set my_command=ping.exe
set my_params=-t www.google.com

echo Command to be executed by 'start': %my_command% %my_params%

:: When NOT using /B or /WAIT then this will create a new window, while
:: execution of this very batch file will continue in the current window:

start %my_command% %my_params%

echo.
echo This line will be executed BEFORE 'start' is even finished. So, this
echo batch file will complete BEFORE one presses Ctrl-C in the other window.
echo.

:: Just for testing use 'pause' to show "Press any key to continue", to see
:: the output of the 'echo' commands. Be sure to press Ctrl-C in the window
:: that runs the 'ping' command (not in this very window). Or simply remove
:: the next line when confused:

pause

Windows XPでテスト済み)

18  sgmoore  2009-09-04


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

私の最近の発見は、cmd.exeの一つのインスタンスを別のインスタンスに置き換えるという、ちょっとした手品(あるいはコンソールウィンドウ)です。これは start cmd /k でコマンド/プログラムを実行した後に .BAT ファイルの exit を実行することで達成されます

元のコンソールウィンドウは消えてしまいますが、CtrlCを経由して綺麗に停止させることができます

tracerouteCtrl+Cで中断したり、完了させてC:\>プロンプトに戻すことができるtracerouteの次の例を考えてみましょう

@echo off

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

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

新しいコマンドインタプリタの環境置換は万人向けではないかもしれませんが、肉眼では、私にとってはうまく機能しているように見えます

14  ViperGeek  2011-05-16


Gringo の解決策は良いのですが、引数リストを渡すスクリプト (つまり python myscript.py %*) では SHIFT%* を更新しないため、うまく動作しません。回避策がありますが、一定の制限があります

最後に書いた改造はこちらです

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

99.(9)% flawless.

13  Alec Mev  2014-02-12


このスタックオーバーフローの質問を参照してください

しかし、cmd.exeにパッチを当てるというのは、そのために私がやることではありません

5  Joey  2009-09-04


TCC/LEフリーのCMDの代替品(CMD++と思ってください)として、バッチジョブの終了プロンプトを抑制するオプションがあります。このオプションは TCC Startup Configuration Dialog にあります

Ctrl-CでバッチファイルをキャンセルするControl-Cを押すと、通常のプロンプトを表示せずにバッチファイルの処理をキャンセルします

Screenshot:

TCC/LE options

TCC/LEを聞いたことがないという方には、こちらのサイトで紹介しています

TCC/LEは、CMDコマンドライン(Windowsのデフォルトのコマンドプロンプト)を置き換えるものです。TCC/LE は CMD のスーパーセットで、111 個の内部コマンド (CMD には 40 個以下のコマンドがあります)、240 個の内部変数と関数、そして既存の CMD コマンドに対する何百もの拡張機能を備えています

TCC/LE は既存のコマンドラインアプリケーションやバッチファイルと連携しますが、コマンドラインやバッチファイルの機能が大幅に改善され、コマンドプロンプトウィンドウに数千もの新機能が追加されています

TCC/LEを何年も使っていて、その前は4NTを使っていました。その前は4NTを使っていましたが、愛着があってお勧めできます。今でも使っていない唯一の理由は、今はほとんどPowerShellしか使っていないからです

5  Charles Roper  2016-10-06


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

このバッチファイルは、カレントディレクトリが自分のユーザディレクトリであるコマンドプロンプトからpingを実行するたびに実行されました。Runウィンドウや他のユーザのディレクトリからpingを実行しても問題なく実行されていました

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

0  None  2010-01-06


起動はうまくいくのですが、バッチファイルで開いたウィンドウが私が持っていたオプションから変更され、「プロパティ」が無効になってしまいました(反応しません)

0  None  2010-03-17


コマンドの最後に < nul を追加することで、バッチ標準入力をヌルにリダイレクトします

0  Il Cognato  2011-02-22


私は、終了時に親バッチに^Cを投げるように見えるEXEでこれに遭遇し、クリーンな終了時にも “Terminate Batch Job “プロンプトを引き起こしました

私が選択したソリューションは、他の回答に似ていますが、PowerShellプロンプトから(またはCMDからPowerShellインタプリタメソッドを介して、選択した場合)、”Start “でバッチを実行していました

今は2018年ですが、Windows 10ではMicrosoftがCMDをPowerShellに置き換えて優先的にコマンドプロンプトとして使用するようになっているので、デフォルトではGUIで簡単に利用できるようになっています

Startプロセスの開始 のエイリアスです

実行すると、ただ起動して戻るだけです。そのため、起動したプロセスを停止しても、”Terminate Batch Job “というプロンプトは出てきません

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

私のバッチでstart mything.exe -mythings -argumentsを使用すると、完璧に動作しました

PowerShellでは、スクリプトを起動するにはパスの前にパスを付けなければならないので、私はバッチファイルを.\host.batとして実行しています

0  Ƭᴇcʜιᴇ007  2018-02-01


バッチジョブを終了する(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  2018-10-03


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

-2  Ricky Boyce  2018-09-20


スクリプトの最後に、以下のコマンドを追加してください。 echo これはスクリプトの動作を “壊す “ことはありませんし、CDM がバッチを終了させたいかどうかを尋ねるのを防いでいるようです

-3  Henri  2010-11-19


タイトルとURLをコピーしました