如何抑制“终止批处理作业(Y/N)”确认?

如何抑制“终止批处理作业(Y/N)”确认?

在 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 上测试。)

相关内容