Board logo

标题: [其他] 批处理变量作用域的疑问。调用函数后无法获取之前变量。是否有全局变量? [打印本页]

作者: zl7603    时间: 2018-12-27 17:17     标题: 批处理变量作用域的疑问。调用函数后无法获取之前变量。是否有全局变量?

大佬们好_(:з」∠)_
请问一下批处理变量作用域的疑问。调用函数后无法获取之前变量。是否有全局变量?例如:
  1. call :ms
  2. echo %a%
  3. :ms
  4. set a=123
  5. goto :EOF
复制代码
这样并不能取到变量a的值,会提示echo为off,也就是说变量没有创建。
那么我要如何才能取到调用标签处理后的值呢?
批处理有没有return一说?
谢谢大佬!
作者: ivor    时间: 2018-12-27 21:10

为什么非要固守批处理呢,powershell 不行吗,难道你还用的xp系统?
作者: Batcher    时间: 2018-12-27 21:48

在我的Win7里面测试你这段代码没能重现问题
作者: 523066680    时间: 2018-12-28 08:23

老用户表示从来都是这么玩儿的,批处理到处都是全局变量,哪有你说的问题?

作者: SQYSQYSQY    时间: 2019-1-5 22:28

本帖最后由 SQYSQYSQY 于 2019-1-5 22:34 编辑

回复 1# zl7603


    请把问题背景说清楚。批处理用的均为全局变量。
你是不是把上面代码写入了()中???如果是,下面代码对你有帮助

原代码:
  1. call :ms
  2. echo %a%
  3. :ms
  4. set a=123
  5. goto :EOF
复制代码
新代码:
  1. call :ms
  2. call echo %%a%%
  3. :ms
  4. set a=123
  5. goto :EOF
复制代码
放入一个程序,测试通过。(1~2行放入4~5行。3~5行放入10~12行)
  1. @echo off
  2. set temp=1
  3. if "%temp%"=="1" (
  4. call :ms
  5. call echo %%a%%
  6. )
  7. pause
  8. exit /b
  9. :ms
  10. set a=123
  11. goto :eof
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2