如果批处理文件位于 IF 命令块中间,如何终止它?

如果批处理文件位于 IF 命令块中间,如何终止它?

我最近发现,如果我按 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 :labelandEXIT /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)按键,正如您所期望的那样。

相关内容