我最近发现,如果我按 ctrl+C 取消 IF 命令块中正在运行的超时命令,那么系统不会立即显示“终止批处理作业”选项,而是会取消超时命令并执行 IF 块中的其余命令。只有当块中的所有命令都完成后,我才会最终收到“终止批处理作业”提示。
在这种情况下,是否有任何已知方法可以强制 ctrl+C 立即调出终止提示?通常,我按 ctrl+C 取消,正是因为我不想执行任何其他代码。
或者还有其他即时终止键吗(除了 alt+F4)?
如果您不确定我在说什么,请参阅以下代码。如果您在第一次超时期间尝试按 ctrl+C 终止,则超时将立即取消,然后下一个回显和超时将开始,并且只有当两者都完成后,您才会最终获得终止脚本的选项。
@echo off
if exist C:\ (
echo press ctrl+C to cancel the following 30s timeout
timeout /nobreak 30
echo instead of seeing a terminate batch job prompt straight away, you will see this message
echo in 5s the terminate batch job option will appear
timeout /nobreak 5
)
echo just a dummy line for the above demonstration to remain onscreen before the console closes
答案1
虽然这不是一个直接的答案,但您可以使用一种解决方法:CALL :label
andEXIT /B
语句。例如:
@echo off
if exist C:\ CALL :InIF
echo just a dummy line for the above demonstration to remain onscreen before the console closes
GOTO :EOF
:InIF
echo press ctrl+C to cancel the following 30s timeout
timeout /nobreak 10
echo instead of seeing a terminate batch job prompt straight away, you will see this message
echo in 5s the terminate batch job option will appear
timeout /nobreak 5
EXIT /B
:EOF
这种技术本质上模仿了子程序调用,并且会遵守标准Ctrl+C
(或Ctrl+Break
)按键,正如您所期望的那样。