
批處理ifelse判斷內使用goto語句為何出錯看最簡單的一個例子:
這個是正常的nclick="copycode($('code0'));">復制代碼
- @echo off
- if 3 gtr 0 (
- echo 3 大于 0
- goto :lad0
- echo...
- echo some code...
- echo...
- :lad0
- echo goto here
- echo.
- ) else (
- echo 3 不大于零???
- )
- pause&goto :EOF
再看如下代碼:nclick="copycode($('code1'));">復制代碼
- @echo off
- SETLOCAL ENABLEDELAYEDEXPANSION
- set jg=99
- set jgl=3
- :lad0
- if !jgl! gtr 0 (
- set /a jgl-=1
- echo jgl===!jgl!jg=!jg!
- goto :lad0
- ) else (
- echo jgl 不大于零!jgl! 不大于 0jg=!jg!
- )
- pause&goto :EOF
確實讓人頭痛,看起來在if...else 語句內有goto 的目的標簽在 else 語句之前就會對else語句產生影響。。??聪旅孢@個嵌套的nclick="copycode($('code2'));">復制代碼
- @echo off
- if 3 gtr 0 (
- echo 3 大于 0
- goto :lad0
- echo...
- echo some code...
- echo...
- :lad0
- echo goto here
- echo.
- ) else (echo 3 不大于零??? 這后面的代碼都被忽略了???rem )
- echo 換了一行,3 不大于零???
- )
- echo.End
- pause&goto :EOF
這邏輯錯誤可以使用 if ... if not .... 來解決nclick="copycode($('code3'));">復制代碼
- @echo off
- SETLOCAL ENABLEDELAYEDEXPANSION
- set jg=99
- set jgl=3
- set jg2=9
- set jgl2=5
- if %jg% gtr 0 (
- echo jg 大于零
- :lad0
- if !jgl! gtr 0 (
- set /a jgl-=1
- echo jgl===!jgl!jg=!jg!
- goto :lad0
- ) else (
- echo jgl 不大于零!jgl! 不大于 0jg=!jg!
- )
- ) else (echo jg 不大于零jg === %jg%---else所在行
- if %jg2% gtr 0 (
- echo jg2 大于零
- :lad1
- if !jgl2! gtr 0 (
- set /a jgl2-=1
- echo jgl2===!jgl2!jg2=!jg2!
- goto :lad1
- ) else (
- echo jgl2 不大于零!jgl2! 不大于 0jg2=!jg2!
- )
- ) else (echo jg2 不大于零jg2 === %jg2%---else所在行
- echo jg2 不大于零jg2 === %jg2%
- )
- echo jg 不大于零jg === %jg%
- )
- pause&goto :EOF
nclick="copycode($('code4'));">復制代碼
- @echo off
- SETLOCAL ENABLEDELAYEDEXPANSION
- set jg=99
- set jgl=3
- set jg2=9
- set jgl2=5
- if %jg% gtr 0 (
- echo jg 大于零
- :lad0
- if !jgl! gtr 0 (
- set /a jgl-=1
- echo jgl===!jgl!jg=!jg!
- goto :lad0
- ) else (
- echo jgl 不大于零!jgl! 不大于 0jg=!jg!
- )
- )
- remelse (
- if not %jg% gtr 0 (
- if %jg2% gtr 0 (
- echo jg2 大于零
- :lad1
- if !jgl2! gtr 0 (
- set /a jgl2-=1
- echo jgl2===!jgl2!jg2=!jg2!
- goto :lad1
- )
- if not %jgl2% gtr 0 (
- echo jgl2 不大于零!jgl2! 不大于 0jg2=!jg2!
- )
- )
- if not %jg2% gtr 0 (
- echo jg2 不大于零jg2 === %jg2%
- )
- echo jg 不大于零jg === %jg%
- )
- pause&goto :EOF

