首页 > 解决方案 > 是否可以在使用批处理文件运行循环时检查按键?

问题描述

我很坚持这个;我需要一个批处理(大多数其他程序类型在必须运行的系统上受到限制)运行大约 10.000 次,然后停止。

我用这种方法做到了这一点:(在这里进行了概括和简化,但可以用它来解释东西,因为文件只是点击了一堆东西,速度快得不人道)

@echo off
set loop=0
:start
echo Hello world.
set /a loop=%loop%+1
if "%loop%"=="10000" goto exit
goto start
:exit
exit

上面的代码正在运行,我遇到的问题是风险。有一个小概率,我需要它的程序开始发送击键,如果循环不会仍然运行,这不是什么大问题。该程序可能会以导致 Windows 崩溃的方式崩溃,这不是我所需要的。

所以我要问的问题是:是否可以if keystrokeinput==anything goto exit在循环运行时使用类似的东西来停止它,或者我可以尝试另一种方法吗?

如果没有任何效果,也许第三方程序可以解决问题?

我希望我的需求和问题很清楚

编辑:击键需要像系统范围内一样进行检查。如果批次需要聚焦/打开和可见,它将不起作用。
击键需要从相应的 cmd 外部检测,这意味着系统是否有任何输入。

提前致谢

蒂姆

标签: loopsbatch-file

解决方案


当批处理文件通过Ctrl-CAKA中断时STATUS_CONTROL_C_EXIT,它返回 ErrorLevel-1073741510或 ExitCode C000013A。我们可以利用这一点。

@echo off
echo Press Y to break
call:function

NEVER REACHED
exit /b

:function
REM WORKS inside cached command block!
(
    echo Loop still in progress...
    choice /C ny /T 1 /D n /N>x
    <x >nul 2>&1 call :checkify
)
goto:function


:checkify
cmd /c exit -1073741510

推荐阅读