中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-25 05:10
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]帮忙看一下在if里面设置环境变量为什么会出问题 查看 1,503 回复 3
楼 主 [求助]帮忙看一下在if里面设置环境变量为什么会出问题 发表于 2010-12-15 00:21 ·  中国 上海 浦东新区 电信
新手上路
积分 11
发帖 11
注册 2010-01-18 11:02
16年会员
UID 158906
性别 男
状态 离线
下面是个示例
========================
@ECHO OFF

ECHO CURPATH0=%PATH%
IF "%DATE:~5,2%"=="12" (
ECHO PATH IN=%PATH%
SET CURPATH=%PATH%
ECHO.
SET CURPATH

ECHO.
ECHO CURPATH999=%CURPATH%

CALL d:\T2.BAT>abc.log
@ECHO OFF

SET PATH=%CURPATH%

)
@ECHO ON
====================================
上述代码中,因为T2.BAT里使用set path=xxx,并没有加上%path%,所以会洗掉系统的环境变量;但我不能改.
所以为了保存,使用了一个中间变量来临时保存一下.

但发现,当在if中执行时,ECHO CURPATH999=%CURPATH%执行结果是
CURPATH999=
而我手动再敲入上述命令后,又能正常显示--也就是说放在bat中始终不正常

可当我去掉if语句时,也就是直接执行上述()内的内容时,该语句就显示正常

为什么呢?太奇怪了.因为只赋值一次,应该用不到setlocal ENABLEDELAYEDEXPANSION吧,况且,似乎也和这个没关系吧
2 发表于 2010-12-15 00:29 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
必须开变量延迟!~

[ Last edited by Hanyeguxing on 2010-12-15 at 00:51 ]
3 发表于 2010-12-15 09:49 ·  IANA 局域网IP(Private-Use)
新手上路
积分 11
发帖 11
注册 2010-01-18 11:02
16年会员
UID 158906
性别 男
状态 离线
今早继续试验,发现要把SET CURPATH=%PATH% 提前到if之前的话,不用延迟也是可以正常显示了。

还请能详细解释一下if括号究竟起到了什么作用?是不是所有的括号内外都会有这样的差别?

多谢了!
4 发表于 2010-12-25 11:27 ·  中国 广东 东莞 中移铁通
初级用户
★★
积分 115
发帖 92
注册 2010-12-24 16:57
15年会员
UID 179794
性别 男
状态 离线
学习一下。
论坛跳转: