中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-26 04:41
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何读出多个选项的设定值再赋给变量 查看 616 回复 5
楼 主 如何读出多个选项的设定值再赋给变量 发表于 2009-02-16 11:02 ·  中国 陕西 西安 电信
新手上路
积分 9
发帖 9
注册 2009-02-15 19:31
17年会员
UID 138933
性别 男
状态 离线
有一个如下格式的.txt文件(共6项):
Name=zhoulei
Age=12
Grade=six
...

想用批处理将这些选项的设定值分别读出,即:
set var1=zhoulei
set var2=12
set var3=six
...

再做进一步处理。

我查看批处理的帮助,觉得应该用批处理For命令,但不知该如何实现。
希望大家指点,谢谢!
2 发表于 2009-02-16 11:09 ·  中国 上海 东方有线
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
@setlocal enabledelayedexpansion
for /f "tokens=2 delims==" %%i in (如下格式的.txt) do (
set /a nb+=1
set var!nb!=%%i
)
echo %var1%
echo %var2%
...
3 发表于 2009-02-16 12:15 ·  中国 陕西 西安 电信
新手上路
积分 9
发帖 9
注册 2009-02-15 19:31
17年会员
UID 138933
性别 男
状态 离线
谢谢pooronce的帮助!

1.
set var!nb!=%%i

我查了一下只找到批处理符号有:. >> > < & && | || ^ * % @ ,所以请问符号!的作用?

2.由于提问时的疏忽,我漏掉2个应注意的问题,原.txt文件为分两部:
(第一部分, ;后为注释)
Name=zhoulei ;姓名
Age=12 ;年龄
Grade=six :年级
...

(第二部分,以下为老师对zhoulei 的评语)
...

请问如何在pooronce方法的基础上,如何只取出zhoulei,12等信息,忽略掉注释及第二部分的评语。
4 发表于 2009-02-16 13:31 ·  中国 上海 东方有线
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
for /f "tokens=2 delims== " %%i in (如下格式的.txt) do (

多加一个空格(或再多一个TAB符),就能把后面断开了

!在这里是延迟之后替代%取变量值的
到cmd下看看帮助吧: setlocal /?
5 发表于 2009-02-16 22:53 ·  中国 陕西 西安 电信
新手上路
积分 9
发帖 9
注册 2009-02-15 19:31
17年会员
UID 138933
性别 男
状态 离线
pooronce的方法很好,谢谢!!!

不过,在使用中还发现一个问题:
如果有某一项没有数据,则会将下一项的数据读到本项,导致后面所有选项提前一项,

例如:

Name=zhoulei
Age=12
Award=
Grade=six
Sex=M
...

经批处理读取后,为:
var1=zhoulei
var2=12
var3=six ;第三项本为空
var4=M ;第四项本为six
var5= ;第五项本为M
...


另:
在帮助setlocal /?下并没有符号!的说明。

谢谢!
6 Re 5楼 发表于 2009-02-17 11:42 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
关于!和!!的讲解,参考:CMD/DOS下符号的作用参考
http://www.cn-dos.net/forum/viewthread.php?tid=30985

或者本版搜索“变量延迟”
论坛跳转: