[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理多次反复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
复制代码

  1. if "%p%" neq "1" goto :a1
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 2# ivor


    首先感谢,goto :a1,因为我用call可以传一些值,用call确实不行吗?

TOP

回复 1# yunyan100

这样call次数够多会溢出,不过够你用了
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 4# zaqmlp


    就是想不管反复call自己多少次,最后达到值就返回原来call他的地方,而不是内部还反复返回次数才回到原来call它的地方

TOP

回复 5# yunyan100

不能,就像俄罗斯套娃,需要一层层打开,不过实现你的功能不一定要你这样,论程序设计的重要性
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP



例行建议换个别的语言啦。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

call最大传参好像是494层,495层极为不稳定,每层-1,每层都是主层只要不退出当前层会一直执行下去,由于你的代码call失败传递超过最大限制层则二层主层被强行退出,
标准传递是goto:跳回
for过多的子层最好不要超过所有代码调用层和值494
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

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

TOP

回复 7# codegay


    我从没去学过电脑方面的,知识都来源于网络,所以也就会点bat,其他的就不会了啦

TOP

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
复制代码

TOP

回复 11# slore

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

TOP

返回列表