找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29683|回复: 3

[文本处理] 求助批处理if……goto…… 语句的用法

[复制链接]
发表于 2016-6-22 01:28:42 | 显示全部楼层 |阅读模式
本帖最后由 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 这句岂不是没作用了?

谢谢!

评分

参与人数 1PB -30 收起 理由
pcl_test -30 未按版规发帖

查看全部评分

发表于 2016-6-22 06:23:02 | 显示全部楼层
goto 是一种跳转和循环,在一个批处理中,可以跳转到批处理中的另一段语句,也可以在一段语句前后设置循环来重复运行。
每一个goto都需要一个地址或称之为标签,用来定位。如你上面的goto end,在整个批里没有另一个地址end来和他对应,因此不会成功。由于在你的goto后再没有了其他的语句,批处理退出。
  1. goto的循环
  2. :end
  3. 你的批处理命令
  4. goto end
复制代码
  1. goto跳转
  2. 你的命令
  3. goto end
  4. 你的其他命令
  5. :end
  6. ……
复制代码
可见,goto跳转,会脱离批处理语句的书写顺序,不执行“你的其他命令”而直接到后面的end处执行……

评分

参与人数 1技术 +1 收起 理由
codegay + 1 1

查看全部评分

发表于 2016-6-27 00:30:08 | 显示全部楼层
批处理是区分大小写的,一般对于字母,都会同时把大小写都导向标签
楼主看下是不是这个原因呢
发表于 2016-6-27 20:33:16 | 显示全部楼层
给你正确的写法。
  1. @echo off
  2. :xuanze
  3. set/p xz=是否继续?[Y/N]
  4. if %xz%==Y goto start
  5. if %xz%==N goto end
  6. :start
  7. 你的批处理
  8. goto end
  9. :end
复制代码
======批处理结束。写批处理的时候一定要完整,再有就是,上面的批处理有一个BUG,就是如果你输入的既不是Y,也不是N,或者直接回车,那么批处理依然会执行start标号之后的代码。原因是因为代码中没有考虑到使用者输入YN以外的字母时该怎么办,要避免这个BUG,可以按照如下代码修改。
  1. @echo off
  2. cls
  3. :xuanze
  4. set/p xz=是否继续?[Y/N]
  5. if %xz%==Y goto start
  6. if %xz%==N goto end
  7. goto xuanze
  8. :start
  9. 你的批处理
  10. goto end
  11. :end
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 15:41 , Processed in 0.019921 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表