找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26164|回复: 8

[其他] 批处理局部变量获取的问题

[复制链接]
发表于 2014-11-25 19:25:48 | 显示全部楼层 |阅读模式
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. setlocal ENABLEEXTENSIONS
  4. setlocal
  5. set /a m=0
  6. set /a n=5
  7. call :EchoN
  8. echo !m!
  9. echo !n!
  10. endlocal
  11. exit /b
  12. @echo on

  13. :EchoN
  14. setlocal
  15. set /a n=2
  16. for /l %%a in (1,1,5) do (
  17.   set /a n=!n!*2
  18. )
  19. set /a m=!n!
  20. endlocal
  21. exit /b 0
复制代码
我想在主过程中获取 :EchoN中变量m 的值。除了用输出到文件然后再输入之外,还有没什么更好的办法。也就是echo !m! 是显示EchonN中的那个m的值。
发表于 2014-11-25 20:02:05 | 显示全部楼层
本帖最后由 CrLf 于 2014-11-25 22:09 编辑
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. setlocal ENABLEEXTENSIONS
  4. setlocal
  5. set /a m=0
  6. set /a n=5
  7. call :EchoN
  8. set n=%errorlevel%
  9. echo !m!
  10. echo !n!
  11. endlocal
  12. exit /b
  13. @echo on

  14. :EchoN
  15. setlocal
  16. set /a n=2
  17. for /l %%a in (1,1,5) do (
  18.   set /a n=!n!*2
  19. )
  20. set /a m=!n!
  21. endlocal&exit /b %m%
复制代码
发表于 2014-11-25 20:02:19 | 显示全部楼层
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. setlocal ENABLEEXTENSIONS
  4. setlocal
  5. set /a m=0
  6. set /a n=5
  7. call :EchoN
  8. echo !m!
  9. echo !n!
  10. endlocal
  11. exit /b
  12. @echo on

  13. :EchoN
  14. set /a n=2
  15. for /l %%a in (1,1,5) do (
  16.   set /a n=!n!*2
  17. )
  18. set /a m=!n!
  19. exit /b 0
复制代码
 楼主| 发表于 2014-11-25 21:43:01 | 显示全部楼层
谢谢,也许我没表达清楚,EchoN中的setlocal  endlocal不能去掉。主过程中的setlocal也不能去掉。我是要想在过程很多的时候可以随意使用局部变量n,而不改其他过程的n.但是又要能把子过程中的局部变量m值传到主过程中或者其他过程中。
发表于 2014-11-25 22:10:20 | 显示全部楼层
回复 4# yiwuyun


    那就看 2 楼的方案,不过 exit /b 的办法只能用于数字
发表于 2014-11-25 22:12:33 | 显示全部楼层
本帖最后由 CrLf 于 2014-11-25 23:01 编辑

再来一种通用的:
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. setlocal ENABLEEXTENSIONS
  4. setlocal
  5. set /a m=0
  6. set /a n=5
  7. call :EchoN
  8. set n=%errorlevel%
  9. echo !m!
  10. echo !n!
  11. endlocal
  12. exit /b
  13. @echo on

  14. :EchoN
  15. setlocal
  16. set /a n=2
  17. for /l %%a in (1,1,5) do (
  18.   set /a n=!n!*2
  19. )
  20. set /a m=!n!
  21. for /f "delims=" %%a in ("m=!m!") do endlocal&set "%%a"
  22. exit /b
复制代码
发表于 2014-11-25 22:36:49 | 显示全部楼层
:EchoN中的endlocal改为
endlocal & set m=%m%
发表于 2014-11-25 23:18:43 | 显示全部楼层
楼上正解

  1. :EchoN
  2. setlocal
  3. set /a n=2
  4. for /l %%a in (1,1,5) do (
  5.   set /a n=!n!*2
  6. )
  7. (
  8.   endlocal
  9.   set m=%n%
  10. )
  11. exit /b 0p
复制代码
 楼主| 发表于 2014-11-26 09:26:43 | 显示全部楼层
谢谢各位,很好。这就是我想要的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 12:20 , Processed in 0.019951 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表