在 cmd 中,当我们按下 Ctrl+C 时,目标应用程序将被终止,但如果目标应用程序是从批处理文件调用的,我们将收到此“终止批处理作业 (Y/N)”确认信息。我永远记不起我选择不终止批处理作业的情况。我们如何跳过此确认信息?
答案1
据我所知,您不能这样做,因为此行为是设计使然,并由命令解释器控制。除非您直接反编译并重新编译解释器,否则没有“映射”甚至“拦截”此行为的方法。
答案2
在这地点,我找到了一个有效的解决办法:
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
)
答案3
按两次Ctrl+ C。
答案4
如果您的应用程序正常完成后不需要在批处理文件中执行任何操作,则使用start
命令确保批处理文件在您按下 Ctrl-C 时已经完成。因此不会出现该消息。
例如:
@echo 关闭 设置我的命令=ping.exe 设置 my_params=-t www.google.com echo 由‘start’执行的命令:%my_command% %my_params% :: 当不使用 /B 或 /WAIT 时,这将创建一个新窗口,而 ::此批处理文件的执行将在当前窗口中继续: 启动%my_command%%my_params% 回声。 echo 此行将在“start”完成之前执行。因此,这 在另一个窗口中按下 Ctrl-C 之前,echo 批处理文件将完成。 回声。 :: 仅用于测试,使用“暂停”显示“按任意键继续”,以查看 ::“echo”命令的输出。请务必在窗口中按下 Ctrl-C :: 运行“ping”命令(不在此窗口中)。或者直接删除 ::困惑时的下一行: 暂停
(在 Windows XP 上测试。)