loops - 是否可以在使用批处理文件运行循环时检查按键?
问题描述
我很坚持这个;我需要一个批处理(大多数其他程序类型在必须运行的系统上受到限制)运行大约 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 外部检测,这意味着系统是否有任何输入。
提前致谢
蒂姆
解决方案
当批处理文件通过Ctrl-C
AKA中断时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
推荐阅读
- ios - 比较对象领域 Swift
- python - SQLAlchemy 一对多关系映射/连接错误
- google-sheets - Google 表格单元格值不匹配
- mongodb - Mongodb:通过“_id”字段搜索嵌入文档
- python - 作业完成时更新框架中的标签文本
- c# - WinRT c# 编译为 exe 但不在 Visual Studio 外部运行
- php - 将 laravel 连接到 postgres 数据库
- javascript - 如何从静态网页链接到在 80 以外的端口上侦听的 node.js 应用程序?
- javascript - 在 onChange 事件中将变量作为参数从 JSP 传递?
- vue.js - 是否可以在 vue.js 的 JavaScript 文件中判断 npm 脚本?