标题: [其他] 批处理多次反复call,如果得到设置值如何返回第一次call呢? [打印本页]
作者: yunyan100 时间: 2017-12-30 20:50 标题: 批处理多次反复call,如果得到设置值如何返回第一次call呢?
首先感谢大家的帮助,本来打算是2018.1.1发出自己已经大更改,功能变化,但还是在自己测试中发现问题,请问下如下面的call代码,因为这值不是设置的值,所以反复重call自己,当达到设置的值
,当goto :eof,会反复call的返回的次数,可否不管如何反复call自己只要值得到设置的值,就返回第一次call的位置?谢谢- @echo off
- call :a1
- pause
- echo.%p%
- pause
-
- :a1
- set /p p=请输入:
- if "%p%" neq "1" call :a1
- echo.%p%
- goto :eof
复制代码
作者: ivor 时间: 2017-12-30 21:05
- 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结束,最后调用点使用全局变量即可。- @echo off
- rem 使用全局变量p
-
- call :entry
- pause
- echo.%p%
-
- pause
- exit 0
-
- :entry
- rem 输入不正确,则循环调用get_input方法
- :LOOP
- set p=0
- call :get_input
- if "%p%" neq "1" goto :LOOP
- :END_LOOP
- echo.%p%
- goto :EOF
-
- :get_input
- set /p p=请输入:
- goto :EOF
复制代码
作者: yunyan100 时间: 2017-12-31 16:45
回复 11# slore
谢谢,已经改了,现在没那问题了我收藏以后看大改动时再看看
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |