基于环境温度的戴尔R710风扇控制Windows批处理脚本开发咨询
前置修正
在写判断逻辑前需要先修复你现有代码的2个问题:
- 变量赋值错误:你当前代码里的
CALL SET Temp_Current = %Temp_Current[5]%等号两侧有多余空格,会导致变量名实际为Temp_Current(末尾带空格)无法正常读取,需要修改为:
CALL SET Temp_Current=%Temp_Current[5]%
- 原有逻辑错误:你写的
If "%temp%" >= 20 or "%temp%" <= 24存在逻辑问题,该条件会匹配所有温度值,实际需要的是温度在20~24区间(大于等于20且小于等于24),批处理没有原生or/and关键字,需要通过嵌套if实现多条件判断。 - 判断顺序调整:要从极端值开始判断,避免低优先级条件提前触发,比如低于5℃的判断要放在低于20℃之前,高于50℃的判断放在最前。
完整阈值判断实现代码
REM 强制转换为数值类型,避免读取异常导致逻辑错误 SET /A Temp_Current=%Temp_Current% IF %Temp_Current% EQU 0 ( ECHO 温度读取异常,请检查IPMITool连接状态 GOTO END ) REM 阈值判断逻辑 IF %Temp_Current% GTR 50 ( ECHO The AC is Broken - Call an Engineer and power down the server ! REM 此处可替换为实际的服务器关机、告警触发指令 GOTO END ) IF %Temp_Current% GTR 30 ( ECHO Turn the AC Up to MAX - its getting toasty in here REM 此处可替换为AC调至最大功率的控制指令 GOTO END ) IF %Temp_Current% GTR 25 ( ECHO Turn the AC On. REM 此处可替换为开启AC的控制指令 GOTO END ) REM 20-24℃区间判断,嵌套if实现"且"逻辑 IF %Temp_Current% GEQ 20 IF %Temp_Current% LEQ 24 ( ECHO Turn the AC and Heating Off - save energy and the planet REM 此处可替换为关闭AC、加热设备的控制指令 GOTO END ) REM 低于5℃优先级高于低于20℃ IF %Temp_Current% LSS 5 ( ECHO Call the engineer to fix the heating - its almost freezing in here ! REM 此处可替换为加热故障告警指令 GOTO END ) IF %Temp_Current% LSS 20 ( ECHO Turn the heating on - its getting cold in here and close the door ! REM 此处可替换为开启加热设备的控制指令 GOTO END ) :END REM 此处可添加后续日志输出、资源清理逻辑
补充说明
Windows批处理数值比较需使用固定运算符:GTR(大于)、GEQ(大于等于)、LSS(小于)、LEQ(小于等于)、EQU(等于),不能直接使用>、<等符号,否则会被系统识别为重定向符导致逻辑错误。
内容的提问来源于stack exchange,提问作者A New Home
相关产品推荐
相关产品推荐

