#1 楼
AFAIK您不能这样做,因为此行为是设计使然并由命令解释器控制的。除非您直接反编译并重新编译解释器,否则没有“映射”甚至“拦截”该方法的方法。评论
太令人失望了:(
– Srikanth
09年9月4日在12:42
是的,这令人失望。更令人失望的是,BREAK命令(默认情况下在XP下不执行任何操作)可用于切换提示…
– Synetech
09年12月24日在19:12
尽管可能确实不能使解释器表现出不同,但使用superuser.com/questions/35698/建议的sgmoore这样的启动对我来说似乎是一种完美的解决方法。
– Arjan
2010年1月6日在16:44
它在这里:superuser.com/a/498798/56101
– Totty.js
2014年7月8日在19:19
#2 楼
在此站点上,我找到了一个有效的解决方案:script2.cmd < nul
不必每次在与该行相同的文件夹中创建另一个名为
script.cmd
的脚本时都键入此内容以上。我仅在XP上测试了该技术,但其他人已在Win 7上对其进行了确认。在一个文件中: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
)
评论
如果从内部调用批处理文件(不使用CALL命令),则执行将“永久”转移。如果将STDIN重定向到NUL,则仍然会出现任何“终止批处理作业”提示,但不会等待(因为STDIN消失了)进行输入。这对我有用...
–威廉
13年2月22日在7:54
在Windows 7中有效。
–威廉
13年2月22日在7:54
除非您在批处理中需要用户输入,否则它会起作用。
–augustomen
13年3月27日在14:51
@William,仅调用脚本对我不起作用,但是我想出了一种解决方法:@IF“” ==“%1”(@%0 CALLED
– jpmc26
13年7月19日在23:58
jpmc的答案对我有用。它会回荡织补终止(y / n)吗?消息虽然到此结束,但并不会因此而停止。
–ggb667
2014年1月24日19:02
#3 楼
按两次Ctrl + C。评论
这将不起作用,而是重复提示。
–乔伊
09年9月17日下午5:25
我只是这样做杀死了我的数据库!脚本正在等待“暂停”,所以我执行了CTRL-C,然后出现了提示,因此再次执行了CTRL-C,然后继续运行批处理文件,并删除了我的数据库! @seesuperuser.com/questions/740004/…
–塞巴斯蒂安·迪奥(Sebastien Diot)
2014-4-10 11:48
那不是OP问的。他可以很容易地在^ C之后键入“ N”。
–vladr
2015年5月12日17:35
@vladr按住Ctrl并再次轻按C而不是先按Y再按Enter,将变得无限容易。
–尼克T
2015年12月14日18:27
@SebastienDiot您在脚本上尝试了一种可能永久破坏数据的新技术吗?那是...勇敢。
–基本
16 Mar 6 '16 at 4:19
#4 楼
安装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上进行了link带式访问。
IMO太棒了!
评论
Clink很棒,但是使用cmd.exe或Console2对我来说不起作用。它仍然会询问,并且不会自动填充。
–iono
13年4月22日在4:43
@tometoftom:您是否如上所述更改了设置文件?我必须这样做才能使其正常工作。 (请注意,您必须是管理员才能在Windows Vista及更高版本上正确保存文件...)
– Macke
13年4月22日在7:53
啊,仍然没有骰子。微软,深深地叹了口气,上帝的份...
–iono
13年4月23日在18:00
@iono您是否拥有非英语Windows版本?在这种情况下,clink直到几天前的0.4.3版本才能自动回答提示:github.com/mridgers/clink/releases/tag/0.4.3
– schlamar
15年1月14日在12:13
相关:对于使用cmder的用户,此设置为on \ cmder \ config \ settings。在这里查看相关的问题github.com/cmderdev/cmder/issues/1666
– edmundo096
18年2月27日在16:54
#5 楼
如果您在应用程序正常完成后不需要在批处理文件中执行任何操作,则使用start
命令可确保在按Ctrl-C时批处理文件已完成。因此该消息将不会出现。例如:
@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上经过测试。)
评论
我不知道开始是否真的会有所帮助,但这对我来说似乎很合理。因此,我想知道投票是否暗示这行不通吗?或者,也许谁被否决了谁都不知道Windows的启动(特别是启动/ wait和start / b)命令?然后,请参阅microsoft.com/resources/documentation/windows/xp/all/proddocs/…。请解释下票?
– Arjan
09-09-4 18:48
开始将无法正常工作。每当cmd运行批处理文件时,点击Ctrl + C都会导致当前正在运行的进程终止并显示问题。
–乔伊
09年9月5日在8:54
+1对我有用。但是,/ b关闭Ctrl + C处理(很烦人)。
–尼克·博尔顿(Nick Bolton)
2010-4-10 14:58
如果您双击批处理文件,这很好。但是,如果您在控制台中启动批处理文件怎么办?
– Helgi
2012年4月18日在18:46
(从Windows 7来讲,不确定是否适用于XP)Microsoft聘用的没有思想的开发人员编写start命令的代码,使该窗口的标题同时成为强制性和可选性的愚蠢决定(以一种相当混乱的方式)。因此,如果您的%my_command%用双引号引起来,它将成为窗口的标题,而%my_params%中的第一个参数将成为命令。为了安全起见,请使用“此处有一些标题”开头%my_command%%my_params%。大多数人只使用“”,并诅咒开发人员不使用/ TITLE或/ T选项来设置标题。
– ADTC
2015年6月25日4:09
#6 楼
我一直渴望避免“终止批处理作业”提示的愿望。我最近的顿悟是通过替换一只手(或控制台窗口)来减轻负担
cmd.exe
的另一个实例。这是通过在start cmd /k
文件中通过exit
执行命令/程序后紧接着执行.BAT
来完成的。 原始控制台窗口消失,可以通过Ctrl-C干净地停止替换控制台窗口。
考虑以下示例,该示例可以被Ctrl + C中断,或允许其完成,则将用户返回到
traceroute
提示符:@echo off
set timeout=100
if not "%2"=="" set timeout=%2
start cmd /k tracert -w %timeout% %1
exit
新命令解释器的环境替换可能并不适合所有人,但肉眼可见,看起来很适合我。
评论
+1一种非常新颖的方法,尽管我同意ti并不能完全替代它,但是它很好用(尽管当您使用“替换cmd.exe”开始发布时确实让我担心—安全警报一直响起,直到我了解示例并意识到你的意思是)
–基本
2012年8月6日15:34
您应该使用exit / b退出批处理脚本
–塞巴斯蒂安·戈德莱特(Sebastian Godelet)
15年5月7日在16:23
@SebastianGodelet:通常,这是一个很好的建议,但是这里的目的确实是要关闭(原始)控制台窗口,因为目标命令是在新窗口中启动的。
–mklement0
18年6月16日在22:35
为什么使用“ cmd / k”(保持解释器处于打开状态)而不是“ / c”?只是为了能够看到命令的输出?
–劳尔·萨利纳斯-蒙塔古多
19年3月22日在7:15
#7 楼
Gringo的解决方案很好,但不适用于传递参数列表的脚本(即python myscript.py %*
),因为SHIFT
不会更新%*
。有变通办法,但有一定的局限性。这是我最终得到的修改:
IF [%JUSTTERMINATE%] == [OKAY] (
SET JUSTTERMINATE=
python myscript.py %*
) ELSE (
SET JUSTTERMINATE=OKAY
CALL %0 %* <NUL
)
99.(9)%完美无瑕。
评论
如果myscript.py要从stdin中读取,则此方法将无效。
–詹姆士林
17年7月29日在0:09
我喜欢这种方法的地方是,可以将其压缩为一行,然后粘贴到原始脚本的顶部:IF“%JUSTTERMINATE%” NEQ“ OKAY”设置为“ JUSTTERMINATE = OKAY”并致电%0%*
– Jez
20年7月16日在2:42
#8 楼
请参阅此堆栈溢出问题。但是,修补cmd.exe并不是我要做的事情。
#9 楼
TCC / LE是CMD的免费替代品(认为它是CMD ++),它具有禁止终止批处理作业提示的选项。您可以在“ TCC启动配置”对话框中找到该选项:在Ctrl-C上取消批处理文件:在按Control-C时没有通常的提示,取消批处理文件处理。
截屏:
如果您以前从未听说过TCC / LE,请访问以下站点:
TCC / LE替代了CMD命令行(默认的Windows命令提示符)。 TCC / LE是CMD的超集,具有111个内部命令(CMD少于40个),240个内部变量和函数以及对现有CMD命令的数百种增强功能。
TCC / LE可与现有的命令行应用程序一起使用和批处理文件,但是在命令行和批处理文件功能方面进行了重大改进,并在命令提示符窗口中添加了数千种新功能。
我使用TCC / LE已有多年了,之前使用过4NT。我对此非常有爱,可以推荐它。我仍然不使用它的唯一原因是因为我现在几乎只使用PowerShell。
#10 楼
在我的情况下,正是我的用户目录(在Vista中为C:\ Users \或在XP中为C:\ Documents and Settings \)中的ping.bat文件不确定地保存了批处理作业。每当我从命令提示符运行ping时,都会执行此批处理文件,当前目录是我的用户目录。从“运行”窗口或其他用户目录执行的Ping-ping运行正常。
从我的用户目录中删除了文件,问题已解决!
#11 楼
开始工作,但现在批处理文件打开的窗口已从我的选项中更改,并且“属性”被禁用(不会响应)。#12 楼
只需在命令末尾添加评论
我认为您可能是指
–布赖恩·菲利普斯(Brian Phillips)
2011-12-7 13:54
#13 楼
我遇到了一个EXE,它似乎在退出时将^ C扔给了父批处理,即使在干净的退出时也会引起“终止批处理作业”提示。我选择使用的解决方案是使用“开始”运行批处理,与其他答案类似,但是从PowerShell提示符下(或选择CMD的PowerShell解释器方法)。 />
现在是2018年,并且在Windows 10中,Microsoft已开始使用PowerShell作为首选命令提示符来取代CMD,因此默认情况下它可以在GUI中随时使用。
Start
是一个Start-Process的别名。运行时,它将启动并返回。因此,当您停止启动的过程时,不会出现“终止批处理作业”提示。
默认情况下它不会等待,因此除了该命令外,没有其他参数是必需的。
在我的批处理中使用
start mything.exe -mythings -arguments
效果很好。在PowerShell脚本中,必须先启动它们的路径才能启动,因此我将我的批处理文件作为
.\host.bat
运行。#14 楼
取消“终止批处理作业(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
)
#15 楼
如果您使用Hyper终端,抑制确认的最简单方法是添加hyper-yes插件。评论
为什么要投票?我仅在使用Hyper时表示。使用Windows时,实际上是一个很好的解决方案。
– Ricky Boyce
18年11月9日在22:25
问题是关于cmd.exe。
–劳尔·萨利纳斯-蒙塔古多
19 Mar 22 '19在7:04
#16 楼
在脚本末尾,只需添加以下命令:echo
这不会“破坏”脚本的行为,并且似乎阻止CDM询问是否要终止该批处理。
评论
没为我工作。
– Helgi
2012年4月18日在18:47
评论
您是否尝试过sgmoore的答案? superuser.com/questions/35698/…“我永远不记得选择不终止批处理作业的情况。”实际上,在大多数情况下,即使您回答“否”,作业也会终止。
@PhiLho-不可能如此,因为输入N后我的脚本始终会继续。我很好奇您遇到哪种情况,输入N后批处理脚本会终止。
我原本希望这很容易,但是像往常一样,微软使简单的事情变得很痛苦。下面的答案都花费了太多的精力来避免这种小麻烦。我很生气,没有简单的方法可以解决此问题。说真的,微软,这个提示的意义是什么?是的,我确定,这就是为什么我按下Ctrl + C ...
此问题至少使我记住并更频繁地使用-n开关进行cygwin ping。