Board logo

标题: [其他] 批处理setlocal怎样设置一个全局变量? [打印本页]

作者: newswan    时间: 2010-8-27 21:49     标题: 批处理setlocal怎样设置一个全局变量?

setlocal enabledelayedexpansion
......
endlocal

函数中需要用到变量延迟
但,又希望设置一个全局变量

怎么办?

[ 本帖最后由 newswan 于 2010-8-27 22:05 编辑 ]
作者: TX_kakashi    时间: 2010-8-28 09:19

为啥允许变量延迟就不能设置全局变量了?
作者: qq106942397    时间: 2010-8-28 10:03

  1. set  a=88
  2. setlocal enabledelayedexpansion
  3. set  a=99
  4. endlocal&set  a=00
  5. echo %a%
复制代码
自己观察吓
作者: TX_kakashi    时间: 2010-8-28 12:08

setlocal到endlocal之外设置一个变量就好了呀,我没明白lz为啥说不能设置全局变量了。
作者: newswan    时间: 2010-9-16 02:50

我的意思是,内部的变量值改变,能在外部使用
  1. set  a=88
  2. setlocal enabledelayedexpansion
  3. set  a=99
  4. endlocal
  5. echo %a%
复制代码

setlocal内部设置了a=99,但外部的没变,a=88
setlocal、endlocal的变量就是局部的。。即使他们名字相同
作者: FOR    时间: 2010-9-16 03:04

3楼不是给出答案了么.
作者: skdu7e    时间: 2010-9-24 22:06

汗………………
还有这个说法,受教了,呵呵
作者: ckz1211    时间: 2014-2-16 16:26

我的意思是,内部的变量值改变,能在外部使用

setlocal内部设置了a=99,但外部的没变,a=88
setlocal、 ...
newswan 发表于 2010-9-16 02:50
  1. @echo on
  2. set  a=88
  3. setlocal enabledelayedexpansion
  4. set  a=99
  5. endlocal & set /a a=%a%+10
  6. echo %a%
  7. pause
复制代码
必须用set /a a=%a%+10
用set /a a=!a!+10会提示运算符不存在
用set /a a+=10和call set /a a=%%a%%+10都是做变量延迟处理,取到的都是Local外部的值
作者: tiandyoin    时间: 2023-2-23 04:06

回复 8# ckz1211


    可是 setlocal enabledelayedexpansion 的作用就没体现到了。本来是要取 !! 的值给外部用的呀。
作者: qixiaobin0715    时间: 2023-2-23 09:23

setlocal
...
endlocal
那是没搞明白其作用。
配对使用的意义就是要在它们之间定义和使用变量,一旦执行到endlocal就销毁其间所有自定义变量。所以在外部不可能使用内部变量的值。
作者: Five66    时间: 2023-11-6 21:41

用预处理方式带出变量:
  1. set  a=88
  2. setlocal enabledelayedexpansion
  3. set  a=99
  4. endlocal&set  a=%a%
  5. echo %a%
  6. pause
复制代码
用for方式带出变量:
  1. set  a=88
  2. setlocal enabledelayedexpansion
  3. set  a=99
  4. for %%i in (!a!) do endlocal&set a=%%i
  5. echo %a%
  6. pause
复制代码





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