web-dev-qa-db-ja.com

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

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

148
Srikanth

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

48
BinaryMisfit

押す Ctrl+C 二度。

57

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

script2.cmd < nul

上記の行と同じフォルダーにscript.cmdという2番目のスクリプトを作成するたびにこれを入力する必要はありません。私はXPでのみこのテクニックをテストしました、しかし、他のものは勝利7でそれを確認しました。

Nathan氏は、次のように付け加えています。もう1つの選択肢は、script.cmdの先頭に次のコードを追加することです。これは、1つのファイルで同じことを行います。

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

インストール クリック して、 "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!

28
Macke

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

例えば:

@echo off 
 
 set my_command = ping.exe 
 set my_params = -t www.google.co.jp 
 
 echo実行するコマンド'start':%my_command%%my_params%
 
 ::/Bまたは/ WAITを使用していない場合は、これで新しいウィンドウが作成されます。 
 
 start%my_command%%my_params%
 echo。
 echoこの行は、実行前に実行されます。 'start'は終了しています。そのため、この
エコーバッチファイルは、もう一方のウィンドウでCtrl-Cを押す前に完了します。
 echo。
 
 ::テストのためだけに 'pause'を使用する「続けるには任意のキーを押してください」と表示し、
 :: 'echo'コマンドの出力を確認します。必ず[ping]コマンドを実行するウィンドウ
 ::でCtrl-Cを押してください(このウィンドウではありません)。または混乱した場合は単に
 ::次の行を削除します:
 
一時停止

(Windows XPでテスト済み)

17
sgmoore

私はしばらくの間 "Terminate batch job"プロンプトを避けたいというこの欲求と戦いました。

私の最新のエピファニーは、cmd.exeのインスタンスを別のインスタンスに置き換えることで、ちょっとした手のひらサイズ(またはコンソールウィンドウ)になります。これは、start cmd /kファイルで.BATに続けてexitを指定して、コマンド/プログラムを実行することによって実行されます。

元のコンソールウィンドウは消え、交換用のウィンドウは次の方法できれいに停止できます。 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の解決策は良いですが、SHIFTpython myscript.py %*を更新しないので、引数リストを渡すスクリプト(すなわち%*)ではうまくいきません。 回避策 がありますが、それらには一定の制限があります。

これが私が最後に行った修正です。

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

99.(9)%完璧。

7

このStack Overflowの質問 をご覧ください。

しかし、cmd.exeにパッチをあてることは私がそれのためにするものではありません。

4
Joey

スタートは動作しますが、バッチファイルによって開かれたウィンドウは私が持っていたオプションから変更され、 "プロパティ"は無効にされます(応答しません)。

0
user31480

私は、終了時に^ Cを親バッチにスローするように見えるEXEを使用してこれに遭遇し、クリーンな終了時でも「Terminate Batch Job」プロンプトを出しました。

私が使用することを選択した解決策は、他の答えと同じように「開始」でバッチを実行することでしたが、PowerShellプロンプトから(または、選択した場合はCMDのPowerShellインタープリターメソッドを介して)。

2018年になりました。Windows10では、Microsoftは優先コマンドのプロンプトとしてPowerShellを使用したCMDに取って代わるようになりました。そのため、デフォルトではGUIですぐに使用できます。

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

実行すると、起動して戻るだけです。そのため、起動したプロセスを停止したときに、「Terminate Batch Job」プロンプトは表示されません。

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

私のバッチでstart mything.exe -mythings -argumentsを使うことは完全にうまくいきました。

PowerShellでは、スクリプトを起動するパスを前に付ける必要があるので、私はバッチファイルを.\Host.batとして実行します。

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
)
0
kevinf

コマンドの末尾に<nulを追加して、バッチ標準入力をnullにリダイレクトするだけです。

0
Il Cognato

私の場合、それは私のユーザーディレクトリ(VistaではC:\ Users \、XPではC:\ Documents and Settings \)にあったping.batファイルでした。

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

私のユーザーdirからファイルを削除して問題は解決しました!

0
bonipet

TCC/LE は無料のCMD置き換え(CMD ++と考えてください)で、バッチジョブの終了プロンプトを抑制するオプションがあります。このオプションは、 TCCスタートアップ設定ダイアログ にあります。

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

スクリーンショット

TCC/LE options

あなたがTCC/LEについてこれまでに聞いたことがないのであれば、これはサイトからのいくつかの曖昧さです:

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

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

私は長年TCC/LEを使い、それ以前は4NTを使いました。私はそれが大好きですし、それをお勧めすることができます。私がまだそれを使用していない唯一の理由は、私が現在ほとんど排他的にPowerShellを使用しているからです。

0
Charles Roper