Board logo

标题: [代码合集] 批处理if……goto……语句无法正常跳转到指定标签是什么原因 [打印本页]

作者: jellyhk    时间: 2008-8-4 23:44     标题: 批处理if……goto……语句无法正常跳转到指定标签是什么原因

本帖最后由 pcl_test 于 2016-11-17 12:46 编辑

请帮我看下重启机器的批处理有什么错误?
@echo off
echo 是否选择重起机器...
set /p input=请输入"y"或"n". <2.txt
if "%input%" == "y" goto s
if "%input%" == "n" goto n
:s

ping -n 1 127.1 >1.txt
:n
echo 123 >3.txt



我在2.txt里输入y或n都只能得到3.txt
是那里错了!!!
作者: pusofalse    时间: 2008-8-4 23:47

当然这样。
set/p = <file都是取文件最后一行的。
作者: Batcher    时间: 2008-8-5 09:46     标题: 回复 2楼 的帖子

应该是第一行,不是最后一行吧。
  1. @echo off
  2. echo 是否选择重起机器...
  3. set /p input=请输入"y"或"n". <2.txt
  4. if "%input%" == "y" (
  5.   goto :s
  6. ) else if "%input%" == "n" (
  7.   goto :n
  8. )
  9. :s
  10. >1.txt ping -n 1 127.1
  11. goto :eof
  12. :n
  13. >3.txt echo 123
复制代码

作者: jellyhk    时间: 2008-8-8 23:48

我狂倒!!
楼上的兄弟看清我的问话!!
我是说在2.txt里输入y或n都只能得到3.txt
说明什么???说明2.txt只有一个撒!!!......真是的!!!
为什么y也会指向:n呢!!!


不懂
作者: Batcher    时间: 2008-8-9 01:37

我狂倒!!
楼上的兄弟看清我的代码!!
你在2.txt里输入y或n都只能得到3.txt
说明什么???说明你还不了解那个代码是怎样跳转的!!!......真是的!!!
为什么y也会指向:n呢!!!因为你少写了goto :eof

不懂就多看教程^_^
作者: onebat    时间: 2008-8-9 03:23

TO:4#    因为你少写了goto :eof

TO:5#    不懂就多看教程^_^这句话可能是他学习的动力了.
作者: pusofalse    时间: 2008-8-9 04:03     标题: 回复 3楼 的帖子

多谢指出 差不多混淆了。
作者: jellyhk    时间: 2008-8-10 23:34

斑竹大哥!
我测试了加goto :eof成功了!!
不过是在每个标签前加了才成功的!!!!
为什么不给我说!!!........


goto :eof是什么意思??
作者: Batcher    时间: 2008-8-11 01:56

楼主大哥!
本来就是加goto :eof才能成功!!
确实需要在每个标签前加了才成功的,批处理就是这样运行的!!!!
为什么不仔细看别人给出的代码!!!........


goto :eof的意思是跳转到该批处理文件的末尾
作者: jellyhk    时间: 2008-8-13 00:41

谢谢 大哥门!!
真热心
作者: jellyhk    时间: 2011-11-11 16:57     标题: 比较字符串的批处理if命令哪里错了?

  1. @echo off
  2. set /p var=请输入第一个比较字符:
  3. set /p var2=请输入第二个比较字符(多输入个空格试试):
  4. if "%var%" == "%var2%" (goto a)
  5. :a
  6. cls
  7. echo yes
  8. :b
  9. cls
  10. echo no
  11. pause
复制代码
为什么光是出现no而这段代码是正确的?
  1. @echo off
  2. set /p var=请输入第一个比较字符:
  3. set /p var2=请输入第二个比较字符(多输入个空格试试):
  4. if "%var%" == "%var2%" (echo yes) else echo no
  5. pause
复制代码

作者: yyykkkyyyy    时间: 2011-11-11 17:21

那错的代码,我相信每行意思你都懂,那句if "%var%" == "%var2%" (goto a)
等效于去掉它,因为无论是否满足都是顺序执行随后的 :a , 且执行完:a 的部分后还会继续执行 :b 的部分
自己琢磨一下吧
作者: wc726842270    时间: 2011-11-11 17:25

退出点问题。这点我感觉你能想到啊!!!
  1. @echo off
  2. set /p var=请输入第一个比较字符:
  3. set /p var2=请输入第二个比较字符(多输入个空格试试):
  4. if "%var%" == "%var2%" (goto a)
  5. :a
  6. cls
  7. echo yes
  8. pause>nul&goto :eof
  9. :b
  10. cls
  11. echo no
  12. pause
复制代码
没有改什么,只是加上一句而以
作者: lvsehuaxue    时间: 2011-11-11 17:31

因为出现的yes杯第二个cls清除掉了。你可以将第二个cls去掉看看。
作者: BS0小陈    时间: 2011-11-11 19:17

呵呵~以前我也有这样的错误因为你
如果if成立那么他的确运行了echo yes
但是因为没有退出命令那么他还会继续运行下去自然就运行了:b的内容了,就cls&echo no 了~~~~
作者: 920168    时间: 2011-11-11 19:34

  1. @echo off
  2. set /p var=请输入第一个比较字符:
  3. set /p var2=请输入第二个比较字符(多输入个空格试试):
  4. cls
  5. if "%var%" == "%var2%" (echo yes) else (echo no)
  6. pause
复制代码

作者: Hello123World    时间: 2011-11-14 12:41

3楼的代码说明了问题。

标签也是代码,不控制就会按顺序执行。

例如:
  1. @echo off
  2. :a
  3. echo hello
  4. :b
  5. echo world
  6. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2