[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
如果比较复杂的,setlocal 隔离还是必要的,虽然隔离要麻烦些。
我现在遇到的一个情况是,以前有一个脚本,单独使用的,现在要在另一个脚本里调用,两个脚本里有变量冲突。
认为,与其改变量名,不如 setlocal ,仅仅返回需要的变量,把输出的变量名,前面加一个前缀,_a_var1
用一个通用的办法比较好些。

TOP

本帖最后由 newswan 于 2024-8-25 04:10 编辑

回复 13# HOPE2021

变量名 变量值 不够多的时候,可以,一般的脚本不会有那么多输出。
可以用把参数的方式返回。调用的地方获取整个字符串后,再进行处理。

TOP

回复 3# qixiaobin0715

代码位置是在 endlocal 之外,但是逻辑上还是在 endlocal 运行之前

TOP

本帖最后由 newswan 于 2024-8-26 09:55 编辑

最后选择这种方式
a.bat
  1. @echo off
  2. setlocal
  3. set _var1_=111
  4. call b.bat
  5. echo :1
  6. set _
  7. for /f "usebackq tokens=1,* delims==" %%a in (`set __`) do (
  8. set _b%%a=%%b
  9. set %%a=
  10. )
  11. echo :2
  12. set _
  13. endlocal
  14. pause
  15. exit/b
复制代码
b.bat
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set __var1__=value1
  4. set __var2__=value2
  5. set __var3__=value3
  6. for /f "delims=" %%a in ('set __') do (
  7. if defined _inLocal_ (endlocal)
  8. set %%a
  9. )
  10. exit/b
复制代码
个人习惯,变量用 "_" 开头,要输出的变量,用 "__" 开头

TOP

本帖最后由 aloha20200628 于 2024-8-25 10:56 编辑

回复 1# newswan

主批通过 call 调用子批,其实是共享主批的变量环境,除非子批用 setlocal [...] 独建自己的本地变量环境,但子批最后将本地变量 ‘续命’ 给主批,还是要避免与主批的同类同名变量的覆盖问题,因此,多个子批被主批通过 call 调用的一个简捷而稳妥之策,是由主批给每个子批分配共享变量名区段(子批独建的本地变量除外)用前缀或后缀或流水号标识等方法,不必再绕经每个子批的 ‘续命’
弯道,此法不仅是针对批处,其他脚本依然... 仅供参考

TOP

返回列表