标题: [文本处理] 求助批处理if……goto…… 语句的用法 [打印本页]
作者: quartz123 时间: 2016-6-22 01:28 标题: 求助批处理if……goto…… 语句的用法
本帖最后由 pcl_test 于 2016-6-22 15:05 编辑
@echo off
:xuanze
set xz=
set/p xz=是否继续[Y/N?]
if "%xz%"=="Y" goto start
goto end
如果不要goto end的话,输入Y回车则执行,现在输入Y回车直接不执行就退出了。。
PS:再请教下,在没有goto end的情况下,不用输入Y,直接回车也可以执行,那样的话 if "%xz%"=="Y" goto start 这句岂不是没作用了?
谢谢!
作者: hlzj88 时间: 2016-6-22 06:23
goto 是一种跳转和循环,在一个批处理中,可以跳转到批处理中的另一段语句,也可以在一段语句前后设置循环来重复运行。
每一个goto都需要一个地址或称之为标签,用来定位。如你上面的goto end,在整个批里没有另一个地址end来和他对应,因此不会成功。由于在你的goto后再没有了其他的语句,批处理退出。- goto的循环
- :end
- 你的批处理命令
- goto end
复制代码
- goto跳转
- 你的命令
- goto end
- 你的其他命令
- :end
- ……
复制代码
可见,goto跳转,会脱离批处理语句的书写顺序,不执行“你的其他命令”而直接到后面的end处执行……
作者: q121212 时间: 2016-6-27 00:30
批处理是区分大小写的,一般对于字母,都会同时把大小写都导向标签
楼主看下是不是这个原因呢
作者: binghejin 时间: 2016-6-27 20:33
给你正确的写法。- @echo off
- :xuanze
- set/p xz=是否继续?[Y/N]
- if %xz%==Y goto start
- if %xz%==N goto end
- :start
- 你的批处理
- goto end
- :end
复制代码
======批处理结束。写批处理的时候一定要完整,再有就是,上面的批处理有一个BUG,就是如果你输入的既不是Y,也不是N,或者直接回车,那么批处理依然会执行start标号之后的代码。原因是因为代码中没有考虑到使用者输入YN以外的字母时该怎么办,要避免这个BUG,可以按照如下代码修改。- @echo off
- cls
- :xuanze
- set/p xz=是否继续?[Y/N]
- if %xz%==Y goto start
- if %xz%==N goto end
- goto xuanze
- :start
- 你的批处理
- goto end
- :end
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |