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

[其他] 批处理setlocal怎样设置一个全局变量?

setlocal enabledelayedexpansion
......
endlocal

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

怎么办?

[ 本帖最后由 newswan 于 2010-8-27 22:05 编辑 ]

为啥允许变量延迟就不能设置全局变量了?

TOP

  1. set  a=88
  2. setlocal enabledelayedexpansion
  3. set  a=99
  4. endlocal&set  a=00
  5. echo %a%
复制代码
自己观察吓

TOP

setlocal到endlocal之外设置一个变量就好了呀,我没明白lz为啥说不能设置全局变量了。

TOP

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

setlocal内部设置了a=99,但外部的没变,a=88
setlocal、endlocal的变量就是局部的。。即使他们名字相同

TOP

3楼不是给出答案了么.

TOP

汗………………
还有这个说法,受教了,呵呵

TOP

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

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外部的值

TOP

回复 8# ckz1211


    可是 setlocal enabledelayedexpansion 的作用就没体现到了。本来是要取 !! 的值给外部用的呀。

TOP

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

TOP

用预处理方式带出变量:
  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
复制代码
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

返回列表