中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-10 16:39
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 隐晦的set 3=10变量引用 查看 1,016 回复 6
楼 主 隐晦的set 3=10变量引用 发表于 2008-11-24 20:18 ·  中国 天津 联通
初级用户
积分 24
发帖 11
注册 2008-11-22 21:08
17年会员
UID 131788
性别 男
状态 离线
引用变量的方法大家应该耳熟能详了吧
set a=10
引用a的方法就是用%%
echo %a%
但是现在有个非典型例子,set 3=10,大家试试看?
echo %3%?
错!
echo %%3%%?
再错!
...
这回被惯性思维绊倒了吧?
答案是:
setlocal EnableDelayedExpansion
echo !3!
10!
呵呵,set不禁止用数字当作变量名,但引用起来就费点手指功夫多敲几个键啦其实还真没有人想会用数字来作变量名(台下:小子,你找抽!)
好啦好啦,解释一下为什么echo %3%会错,原因是批处理对于数字敏感,%3%会优先作为%3考虑,因此在批处理中,数字扩展肯定是参数,而在命令行中,由于没有所谓的参数,数字扩展肯定是变量~呵呵
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
tireless +3 2008-11-24 20:37
balinger +4 2008-11-24 22:09
2 发表于 2008-11-24 22:06 ·  中国 北京 联通
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线
其实还真没有人想会用数字来作变量名


我原来用用负数作“变量名”的方法写过一个加密批处理的东东:)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
balinger +4 2008-11-24 22:08
3 发表于 2008-11-24 23:35 ·  中国 广东 广州 增城区 电信
中级用户
★★
积分 209
发帖 82
注册 2006-03-22 00:18
20年会员
UID 52554
状态 离线
那么,在纯DOS下呢?
4 发表于 2008-11-25 01:45 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
被当作参数解释了吧~

%3%误解析成%3了~
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
5 发表于 2008-11-25 19:33 ·  中国 北京 海淀区 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
某些编程语言带来的思维...变量名不能纯数字..
6 发表于 2008-12-01 21:28 ·  中国 贵州 黔南布依族苗族自治州 都匀市 电信
初级用户
积分 20
发帖 17
注册 2008-09-07 13:21
17年会员
UID 125036
性别 男
状态 离线
Originally posted by maky1117 at 2008-11-24 08:18 PM:
引用变量的方法大家应该耳熟能详了吧
set a=10
引用a的方法就是用%%
echo %a%
但是现在有个非典型例子,set 3=10,大家试试看?
echo %3%?
错!
echo %% ...

为什么我的就可以?

处于,并长期处于潜水状态
7 发表于 2008-12-01 21:47 ·  中国 北京 海淀区 联通
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线
在批处理中
论坛跳转: