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

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

[复制链接]
发表于 2018-12-27 17:17:18 | 显示全部楼层 |阅读模式
大佬们好_(:з」∠)_
请问一下批处理变量作用域的疑问。调用函数后无法获取之前变量。是否有全局变量?例如:
  1. call :ms
  2. echo %a%

  3. :ms
  4. set a=123
  5. goto :EOF
复制代码
这样并不能取到变量a的值,会提示echo为off,也就是说变量没有创建。
那么我要如何才能取到调用标签处理后的值呢?
批处理有没有return一说?
谢谢大佬!
发表于 2018-12-27 21:10:53 | 显示全部楼层
为什么非要固守批处理呢,powershell 不行吗,难道你还用的xp系统?
发表于 2018-12-27 21:48:42 | 显示全部楼层
在我的Win7里面测试你这段代码没能重现问题
发表于 2018-12-28 08:23:45 | 显示全部楼层
老用户表示从来都是这么玩儿的,批处理到处都是全局变量,哪有你说的问题?
发表于 2019-1-5 22:28:02 | 显示全部楼层
本帖最后由 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 23:29 , Processed in 0.018377 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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