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
を実行することで達成されます
元のコンソールウィンドウは消えてしまいますが、Ctrl–Cを経由して綺麗に停止させることができます
traceroute
をCtrl+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を聞いたことがないという方には、こちらのサイトで紹介しています
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