如何将devcon status返回值作为批处理IF条件切换触摸屏状态
解决批处理一键切换触摸屏禁用/启用的问题
我懂你的需求——因为数位板防误触的小问题,你想把两个单独的启用/禁用批处理合并成一个能自动判断状态并切换的脚本。之前的代码用SET /P是走偏了,因为SET /P是用来读取用户输入的,根本没法捕获命令的输出结果。下面给你正确的实现方案:
完整的批处理代码
@echo off setlocal enabledelayedexpansion :: 设置devcon的完整路径,根据你的实际路径调整 set "DEVCON_PATH=D:\Windows Kits\10\Tools\x64\devcon.exe" set "DEVICE_ID=@HID\ELAN0732&COL01\5&242C8B19&1&0000" :: 捕获devcon status的输出,筛选出包含状态的行 for /f "tokens=*" %%a in ('"%DEVCON_PATH%" status "%DEVICE_ID%" ^| findstr /i "disabled running"') do ( set "STATUS=%%a" ) :: 根据当前状态执行对应操作 if "!STATUS!"=="Device is disabled." ( echo 正在启用触摸屏... "%DEVCON_PATH%" enable "%DEVICE_ID%" ) else if "!STATUS!"=="Driver is running." ( echo 正在禁用触摸屏... "%DEVCON_PATH%" disable "%DEVICE_ID%" ) else ( echo 无法识别设备状态,请检查设备ID是否正确。 ) pause endlocal
代码细节解释
@echo off:关闭命令行的默认回显,让输出更简洁干净。setlocal enabledelayedexpansion:启用延迟变量扩展,因为在for循环里动态读取变量值时,必须开启这个选项才能正常获取到最新值。- 直接定义devcon路径:把devcon的完整路径存在变量里,避免频繁切换目录的麻烦,也让代码更易维护。
for /f捕获输出:通过findstr筛选出包含"disabled"或"running"的行(这两行就是我们需要的状态信息)。注意命令里的^|是转义管道符,必须加,否则批处理会把管道符当成当前命令的结束,直接报错。- 条件判断逻辑:根据捕获到的状态字符串,自动执行启用或禁用操作,同时给出明确的提示信息,让你清楚当前在执行什么操作。
为什么之前的代码失败?
- 你用了
SET /P Test=devcon status...,这会把devcon status...当成提示文字,等待你手动输入内容,而不是执行命令并捕获结果——这就是为什么会出现>>等待输入的原因。 - 批处理的
IF语句有严格的语法要求:条件和括号之间必须有空格,比如IF %Test% EQU 1(必须写成IF %Test% EQU 1 (,否则会被当成无效语法直接忽略。
测试一下这个脚本,它会自动检测当前触摸屏的状态,然后执行对应的切换操作,完美替代你之前的两个单独批处理。
内容的提问来源于stack exchange,提问作者Kiljab
相关产品推荐
相关产品推荐

