中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助从文本中逐行提取代码,并分别赋值于不同的变量中
作者:
标题: 求助从文本中逐行提取代码,并分别赋值于不同的变量中 上一主题 | 下一主题
qq11211
初级用户





积分 42
发帖 15
注册 2006-5-11
状态 离线
『楼 主』:  求助从文本中逐行提取代码,并分别赋值于不同的变量中

文本test.txt 内容 "gl3Gy2hUKeS.9qdcjgkWtA--.chatCategories"=dword:45836378 "AhUunOLNkbj5gjiC9Cr57Q--.chatCategories"=dword:457707ca "kl3Gy2thKeSr9qdcjgjWtA--.chatCategories"=dword:458363ss "lhUunOfffbj5gjC9Cgk57Q--.chatCategories"=dword:457707gh "..........." 说明:文本内行数不固定 ,一般<6 行 问题:如何将每行中“ =”号左边引号内的全部代码 分别 赋值到变量1,变量2,变量3,变量n? 运行批处理文件后,最后的结果是 (=号后面的内容) %变量1%=gl3Gy2hUKeS.9qdcjgkWtA--.chatCategories %变量2%=AhUunOLNkbj5gjiC9Cr57Q--.chatCategories %变量3%=gl3Gy2thKeSr9qdcjgjWtA--.chatCategories %变量4%=AUunOfffbj5gbjiC9Cr57Q--.chatCategories %变量n%=n......... 查看变量的结果是 echo %变量1% > test2.txt echo %变量2% >> test2.txt echo %变量3% >> test2.txt echo %变量4% >> test2.txt echo %变量n% >> test2.txt test2.txt 的内容 gl3Gy2hUKeS.9qdcjgkWtA--.chatCategories AhUunOLNkbj5gjiC9Cr57Q--.chatCategories gl3Gy2thKeSr9qdcjgjWtA--.chatCategories AUunOfffbj5gbjiC9Cgr57Q--.chatCategories n......... 请各位指教,谢谢! 此贴昨天发错了地方,请谅解


2006-12-19 02:41
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  假设等号左边的内容没有特殊符号的话(具体是管道符号和重定向符号),可以使用如下代码:
@echo off
set num=0
for /f "delims==" %%i in (test.txt) do call :set_var %%i
pause
goto :eof

:set_var
set var=%1
set "var=%var:~1,-1%"
set /a num+=1
echo var%num%=%var%
goto :eof


   此帖被 +10 点积分      点击查看详情   
评分人:【 ccwan 分数: +5  时间:2006-12-19 05:51
评分人:【 redtek 分数: +5  时间:2006-12-19 05:58




尺有所短,寸有所长,学好CMD没商量。 考虑问题复杂化,解决问题简洁化。
2006-12-19 03:00
查看资料  发短消息  网志   编辑帖子  回复  引用回复
qq11211
初级用户





积分 42
发帖 15
注册 2006-5-11
状态 离线
『第 3 楼』:  

再次谢谢版主,我的批处理如下,中间是您的代码,我的最终目的是要把变量赋值到文件名,copy语句又如何循环,麻烦您帮我搞定吧。我是初学者,基本上是不懂的那一行的,您就多费心顺便说明一下。 @echo off @regedit /e room.reg "HKEY_CURRENT_USER\Software\pager\timestamps" @type room.reg | find ".chatCategories" > room.txt @FOR /F "delims== " %%i in (room.txt) do @set nema=%%~i ---------------------------------------- set num=0 for /f "delims==" %%i in (test.txt) do call :set_var %%i pause goto :eof :set_var set var=%1 set "var=%var:~1,-1%" set /a num+=1 echo "var%num%=%var%" goto :eof ---------------------------------------- @copy room d:\room\%nema1%.xml @copy room d:\room\%nema2%.xml @copy room d:\room\%nema3%.xml @copy room d:\room\%nema4%.xml


2006-12-19 05:47
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 4 楼』:  

qq11211兄下面代码:
@copy room d:\room\%nema1%.xml
@copy room d:\room\%nema2%.xml
@copy room d:\room\%nema3%.xml
@copy room d:\room\%nema4%.xml 
可以简写成下面方式:
for /L %%i in (1,1,4) do copy room d:\room\%nema%%%i.xml




    Redtek,一个永远在网上流浪的人…… _.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-19 06:03
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
qq11211
初级用户





积分 42
发帖 15
注册 2006-5-11
状态 离线
『第 5 楼』:  

根据namejm版主代码,修改为 @echo off @regedit /e room.reg "HKEY_CURRENT_USER\Software\pager\timestamps" @type room.reg | find ".chatCategories" > room.txt for /f "delims==" %%i in ( room.txt) do call :set_var %%i goto :eof :set_var set var=%1 @copy room d:\room\%var%.xml goto :eof 运行后就是我要得结果,但不知道 for /f "delims==" %%i in ( room.txt) do call :set_var %%i goto :eof :set_var 应该如何理解,请版主辛苦解释一下,另外是否还有更简单的办法,请各位指点。 [ Last edited by qq11211 on 2006-12-19 at 09:16 AM ]


2006-12-19 09:11
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
qq11211
初级用户





积分 42
发帖 15
注册 2006-5-11
状态 离线
『第 6 楼』:  

谢谢redtek的指点


2006-12-19 09:12
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
261621998
初级用户





积分 32
发帖 23
注册 2008-5-5
状态 离线
『第 7 楼』:  

找到了找到了找到了


2008-5-19 22:13
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
dslz666
中级用户





积分 233
发帖 117
注册 2007-11-28
状态 离线
『第 8 楼』:  

谢谢了,正在找这方面的批处理


2008-5-19 23:43
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: