Batch批处理脚本中if配合goto使用时所有分支依次执行是什么问题?
错误原因
- if语法使用错误:Batch的
if命令不支持直接写or逻辑,也不支持goto后接带空格的标签名。你写的if %dow% EQU 5 or 6 goto Friday or Saturday会被Batch识别为无效判断,不会执行跳转;同时标签:Friday or Saturday带空格,就算跳转指令写对了也无法正常定位到该标签。 - 缺失兜底终止逻辑:当所有if判断都没有命中(或跳转失败)时,代码执行完
timeout 100后会按顺序向下执行,而:Sunday这类标签只是代码标记,没有跳转中断的话就会依次执行所有标签下的代码,直到碰到exit才会停止,这就是你所有分支命令都依次执行的核心原因。
修正后的代码
@echo off :: 此处默认你已提前给%dow%赋值了0-6的合法数值 if %dow% EQU 0 goto Sunday if %dow% EQU 1 goto Monday if %dow% EQU 2 goto Tuesday if %dow% EQU 3 goto Wednesday if %dow% EQU 4 goto Thursday :: 拆分判断5、6的逻辑,标签名避免使用空格 if %dow% EQU 5 goto Weekend if %dow% EQU 6 goto Weekend :: 兜底逻辑:处理非法星期值的情况 echo 星期值非法:%dow% timeout 100 exit :Sunday Echo sunday Timeout 100 Exit :Monday Echo Monday Timeout 100 Exit :Tuesday Echo Tuesday Timeout 100 Exit :Wednesday Echo Wednesday Timeout 100 Exit :Thursday Echo Thursday Timeout 100 Exit :Weekend Echo Weekend Timeout 100 Exit
内容的提问来源于stack exchange,提问作者timetobeOP
相关产品推荐
相关产品推荐

