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

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

  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的值。

谢谢各位,很好。这就是我想要的。

TOP

楼上正解
  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
复制代码

TOP

:EchoN中的endlocal改为
endlocal & set m=%m%
天的白色影子

TOP

本帖最后由 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
复制代码

TOP

回复 4# yiwuyun


    那就看 2 楼的方案,不过 exit /b 的办法只能用于数字

TOP

谢谢,也许我没表达清楚,EchoN中的setlocal  endlocal不能去掉。主过程中的setlocal也不能去掉。我是要想在过程很多的时候可以随意使用局部变量n,而不改其他过程的n.但是又要能把子过程中的局部变量m值传到主过程中或者其他过程中。

TOP

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

TOP

本帖最后由 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%
复制代码

TOP

返回列表