Board logo

标题: [其他] 批处理多次反复call,如果得到设置值如何返回第一次call呢? [打印本页]

作者: yunyan100    时间: 2017-12-30 20:50     标题: 批处理多次反复call,如果得到设置值如何返回第一次call呢?

首先感谢大家的帮助,本来打算是2018.1.1发出自己已经大更改,功能变化,但还是在自己测试中发现问题,请问下如下面的call代码,因为这值不是设置的值,所以反复重call自己,当达到设置的值
,当goto :eof,会反复call的返回的次数,可否不管如何反复call自己只要值得到设置的值,就返回第一次call的位置?谢谢
  1. @echo off
  2. call :a1
  3. pause
  4. echo.%p%
  5. pause
  6. :a1
  7. set /p p=请输入:
  8. if "%p%" neq "1" call :a1
  9. echo.%p%
  10. goto :eof
复制代码

作者: ivor    时间: 2017-12-30 21:05

  1. if "%p%" neq "1" goto :a1
复制代码

作者: yunyan100    时间: 2017-12-30 21:08

回复 2# ivor


    首先感谢,goto :a1,因为我用call可以传一些值,用call确实不行吗?
作者: zaqmlp    时间: 2017-12-30 21:21

回复 1# yunyan100

这样call次数够多会溢出,不过够你用了
作者: yunyan100    时间: 2017-12-30 21:27

回复 4# zaqmlp


    就是想不管反复call自己多少次,最后达到值就返回原来call他的地方,而不是内部还反复返回次数才回到原来call它的地方
作者: zaqmlp    时间: 2017-12-30 21:40

回复 5# yunyan100

不能,就像俄罗斯套娃,需要一层层打开,不过实现你的功能不一定要你这样,论程序设计的重要性
作者: codegay    时间: 2017-12-30 22:24



例行建议换个别的语言啦。
作者: /zhqsystem/zhq    时间: 2017-12-31 09:47

call最大传参好像是494层,495层极为不稳定,每层-1,每层都是主层只要不退出当前层会一直执行下去,由于你的代码call失败传递超过最大限制层则二层主层被强行退出,
标准传递是goto:跳回
for过多的子层最好不要超过所有代码调用层和值494
作者: yunyan100    时间: 2017-12-31 11:43

首先感谢各位,我也是来确认call能否不管重复多少次,可以退回原来call的地方,看了两位回复不行,我已经把那段被其他多地方的call的公共处理部分改掉了,现在没有了不管里面反复多次只要值符合就回到原来call这里的地方
作者: yunyan100    时间: 2017-12-31 11:43

回复 7# codegay


    我从没去学过电脑方面的,知识都来源于网络,所以也就会点bat,其他的就不会了啦
作者: slore    时间: 2017-12-31 14:56

call你理解为函数,每次调用完call,保存其值,自己用,或者再返回给上层。

还有一种,使用全局变量,各层调用用goto :EOF结束,最后调用点使用全局变量即可。
  1. @echo off
  2. rem 使用全局变量p
  3. call :entry
  4. pause
  5. echo.%p%
  6. pause
  7. exit 0
  8. :entry
  9. rem 输入不正确,则循环调用get_input方法
  10. :LOOP
  11.   set p=0
  12.   call :get_input
  13.   if "%p%" neq "1" goto :LOOP
  14. :END_LOOP
  15. echo.%p%
  16. goto :EOF
  17. :get_input
  18. set /p p=请输入:
  19. goto :EOF
复制代码

作者: yunyan100    时间: 2017-12-31 16:45

回复 11# slore

谢谢,已经改了,现在没那问题了我收藏以后看大改动时再看看




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