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

[数值计算] 【已解决】批处理使用call调用子标签后如何返回值?

本帖最后由 踏沙行 于 2018-8-30 05:16 编辑

原贴搜索不到,只好发新帖求助。不过虽与原贴处理的文档相同,但问题不同。
已知:I:\2.txt有如下内容
  1. 1##4072.0###52.19### #72## #
  2. 2#38705.8# # # 51.73## #70# #
  3. 372###389.0##51.80##19.77# # 72#####
  4. 4##59.71#3715.45##71######
复制代码
问题:将最后一们数字乘以7,然后输出新的结果
我的代码如下:
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%a in (H:\2.txt) do (
  4. call :lp "%%a" string
  5. echo,%string% )
  6. pause&exit
  7. :lp
  8. set "s=%~1"
  9. set/a "i=0" &set "flag="
  10. :loop
  11. set/a "i-=1"
  12. if "!s:~%i%,1!" geq "0" if "!s:~%i%,1!" leq "9" set/a "flag=i"
  13. if not defined flag goto loop
  14. set "begin=!s:~,%flag%!"  
  15. set/a "var=!s:~%i%,1!*7","n=flag+1"
  16. set "end=!s:~%n%!")
  17. echo,old=%s%
  18. set "new=%begin%%var%%end%"
  19. set %2=%new%
  20. goto:eof
复制代码
问题:在子标签中倒是可以实现既定效果。但是:
1、如果把结果返回,返回值为空,不知道到底该怎么返回?现在的代码中哪里有错误,怎么修改?
2、Setlocal enabledelayedexpansion声明好像在主程序中没有作用,怎么把它限定在子标签区域?做这种调整有什么意义?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 踏沙行 于 2018-8-29 19:51 编辑

回复 1# 踏沙行
最后一个数字乘以7,是2*7
现在最大的问题在这一句:
set %2=%new%
想返回结果,但是无法得到返回结果。不知道问题出在哪里了?

TOP

回复 5# Batcher
已经试过,无效。

现在简化一下,以例题来尝试
已知:H:\1.txt内容如下:
  1. abcde
  2. feghj
  3. klmno
  4. pqrst
复制代码
要求,用call和子标签,来取出每行开头到倒数第一位字符中间的内容
  1. @echo off
  2. for  /f %%a in (H:\1.txt) do (
  3. call :lp %%a b
  4. echo,b=%b% )
  5. pause&exit
  6. :lp
  7. set "Str=%1"
  8. set "T=%str:~,-1%"
  9. set "%2=%T%"
  10. goto:eof
复制代码
【问题】得不到返回值,即set %2=%T%这一句,并没有把结果回传回去。

TOP

谢谢二位,我也是刚刚找到问题,因为主程序使用for,所以在echo的时候,应该使用!!,我之前使用的是%%
变量延迟,真是一个大问题。

TOP

返回列表