中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-08 03:44
48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » 怎样提取一个文件中的变量值?
可打印版本  843 / 8
第1楼 westwind 发表于 2008-04-17 15:53
初级用户 发帖 28 积分 72
怎样提取一个文件中的变量值?
目前有一个文件config.ini,其内容为:
update=yes
a=sss
bak=yes
datetime=200804171356
name=t
.
.
.
我有2件事要做:
1,判断update的值是否为'yes',如果是的,就执行另一个批处理1.bat,执行完后令update=no,这个我已经实现了,但缺点是update=yes必须放在第一行:
@echo off
for /f "tokens=*" %%a in (config.ini) do (
if /I %%a==update=yes (
call 1.bat
ECHO update=no>config.ini
) else (
echo %%a>>config.ini
)
)
有谁可以帮我改改?我不想用新建一个临时文件去替换的方式实现。
2,在call 1.bat后,要提取config.ini中的变量datetime的值(这个值是随时变化的,所以我不想写死在批处理里),并传递给1.bat,或直接在1.bat里提取datetime的值,这个应该怎样实现呢?
1.bat的内容是:
xcopy /s/r/y d:\temp\*.* e:\temp
我要datetime的值的目的是在执行完1.bat后生成一个以datetime的值为名字的log文件。
谢谢!

[ Last edited by westwind on 2008-4-17 at 04:30 PM ]
第2楼 26933062 发表于 2008-04-17 16:25
银牌会员 发帖 879 积分 2,268
你说想把datetime的值传给1.bat但是如果datetime=200804171356在update=yes的下面,就没法传给1.bat了。因为update=yes时启动了1.bat,但是还没有循环到datetime=200804171356这一行。
:

[ Last edited by 26933062 on 2008-4-17 at 04:26 PM ]
第3楼 westwind 发表于 2008-04-17 16:43
初级用户 发帖 28 积分 72
不好意思,我的代码里应该是call 1.bat, 而不是testC.bat,我已经改过来了,请问在call 1.bat之后,怎样在1.bat里接收这个datetime呢?如果不能传递到1.bat里面,可否直接在1.bat 里面读config.ini里面的datetime?
第4楼 26933062 发表于 2008-04-17 17:03
银牌会员 发帖 879 积分 2,268
::简化了一下,如果在call 1。bat之前就提取到了datetime的值,就把它当参数传给1.bat
如果call 1.bat时,还没有取到datetime的值,就在1.bat中再从config.ini中提取。
:


1.bat 内容


[ Last edited by 26933062 on 2008-4-17 at 05:06 PM ]
第5楼 westwind 发表于 2008-04-17 17:39
初级用户 发帖 28 积分 72
用你简化后的批处理测试,并将config.ini调整为:
datetime=200804171356
update=yes
a=sss
bak=yes
name=t
发现运行后,update以下的参数都没了。。
只有
datetime=200804171356
update=no

[ Last edited by westwind on 2008-4-17 at 05:45 PM ]
第6楼 26933062 发表于 2008-04-17 17:49
银牌会员 发帖 879 积分 2,268
我测试没问题啊?
第7楼 westwind 发表于 2008-04-17 18:05
初级用户 发帖 28 积分 72
请问%~1和%~2分别是什么意思?
这段代码好象跟config.ini的内容顺序有关系,如果datetime在update的后面批处理会出问题,即config.ini像这样:
update=yes
datetime=200804171356
a=sss
bak=yes
name=t

不过用回原来你简化前的就可以了,你测试是用的简化后的代码测的?

[ Last edited by westwind on 2008-4-17 at 06:15 PM ]
第8楼 26933062 发表于 2008-04-17 18:20
银牌会员 发帖 879 积分 2,268
代码没问题,问题出在你的1.bat上面,
当update=yes时,config.ini的内容已经重写了,但还没有datetime这一行。
所以1.bat也找不到这一行。
这样好了1。bat内容:


第9楼 westwind 发表于 2008-04-17 18:34
初级用户 发帖 28 积分 72
Good! 高手!
Thank You Very Much!
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023