![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-24 06:46 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何控制从for语句中读取每个变量? |
| 可打印版本 2,394 / 15 |
| 第1楼 yardian | 发表于 2006-12-04 08:09 |
| 中级用户 发帖 85 积分 305 | |
|
如何控制从for语句中读取每个变量? D:\> dy -e
Build date: Nov 17 2006 13:20:41 Network device list: rpcap://\Device\NPF_{4EE23166-981C-4E56-B425-40A6E65FA56E} : Network adapter 'VMware Virtual Ethernet Adapter' on local host rpcap://\Device\NPF_{6EFA89AD-F6B3-4B65-9D3A-60859B5125FD} : Network adapter 'VMware Virtual Ethernet Adapter' on local host rpcap://\Device\NPF_{99FFCEE6-638B-4739-8963-3E64C031A4B7} : Network adapter 'Realtek RTL8139 Family Fast Ethernet Adapter' on local host 通过dy -e我能获取如上的信息.现在的需求是将,将每一行中''内的内容指定给name变量如:name3=Realtek RTL8139 Family Fast Ethernet Adapter,而将同一行中//后,:前的部分指定给card变量即:card3=\Device\NPF_{99FFCEE6-638B-4739-8963-3E64C031A4B7}.同时能够显示一共使用了name变量如这里一共会有3个name变量 |
|
| 第2楼 a9319751 | 发表于 2006-12-04 08:19 |
| 中级用户 发帖 170 积分 439 | |
|
for /f "skip=4 delims=" %%i in (1.txt) do echo %%i
可以读出每一行 然后用 set var=!var:rpcap://=! 把三个网卡替换成 \Device\NPF_{4EE23166-981C-4E56-B425-40A6E65FA56E} : Network adapter 'VMware Virtual Ethernet Adapter' on local host \Device\NPF_{6EFA89AD-F6B3-4B65-9D3A-60859B5125FD} : Network adapter 'VMware Virtual Ethernet Adapter' on local host \Device\NPF_{99FFCEE6-638B-4739-8963-3E64C031A4B7} : Network adapter 'Realtek RTL8139 Family Fast Ethernet Adapter' on local host 最后用for :为分隔符 设置每一个变量, 今天要回家了,就先帮你分析下 [ Last edited by a9319751 on 2006-12-4 at 08:24 AM ] |
|
| 第3楼 yardian | 发表于 2006-12-04 08:47 |
| 中级用户 发帖 85 积分 305 | |
|
最好还是不要临时文件,生成临时文件,最后还要删除.会被杀软误杀的
|
|
| 第4楼 lxmxn | 发表于 2006-12-04 09:04 |
| 版主 发帖 4,938 积分 11,386 | |
|
楼主的dy是三方工具么? 可否上传一个? 要不生成临时文件,就要用这个工具进行测试啊,不然怎么测试? |
|
| 第5楼 yardian | 发表于 2006-12-04 09:27 |
| 中级用户 发帖 85 积分 305 | |
|
其实,我觉得只要能将读取的每一行内容赋给一个不同的变量(如:第一行赋给name1,第二行赋给name2,第三行赋给name3...)然后再从name1,name2...中提取所需内容就可以了.只是我想不到如何才能实现:将每一行内容赋给一个不同的变量.因为for语句是循环的,而且覆盖式的,后面会覆盖前面的值.
[ Last edited by yardian on 2006-12-4 at 10:07 AM ] |
|
| 第6楼 youxi01 | 发表于 2006-12-04 10:34 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
看看这个是不是你要的:
@echo off for /f "skip=4 delims=/: tokens=2,3" %%i in ('dy -e') do ( set /a a+=1 call set card%%a%%=%%i call set name%%a%%=%%j) set card echo. set name echo. echo 共有%a%个name变量 pause>nul |
|
| 第7楼 seyeskcn | 发表于 2006-12-04 11:51 |
| 新手上路 发帖 6 积分 12 来自 河南洛阳 | |
|
顶了,支持一下吧!
|
|
| 第8楼 yardian | 发表于 2006-12-04 11:52 |
| 中级用户 发帖 85 积分 305 | |
|
感谢,基本上是我所希望的效果!!!!!!!!!!
唯一就是name变量不是引号内的内容 [ Last edited by yardian on 2006-12-4 at 12:16 PM ] |
|
| 第9楼 youxi01 | 发表于 2006-12-05 01:01 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
呵呵,没看清LZ的要求:
试试以下代码(稍微做了修改): |
|
| 第10楼 yardian | 发表于 2006-12-06 08:35 |
| 中级用户 发帖 85 积分 305 | |
|
谢谢!我后来也搞出来了。不过我发现你用set代替echo显示的确比较高,但是却给我的应用带来了麻烦。偶太菜,别介意啊!
对于name和card的变量,我如何调用呢? 我试了:%name%a%%,%name^%a^%%,%name\%A\%%,%(name%a%)%都不行啊? |
|
| 第11楼 yardian | 发表于 2006-12-08 00:08 |
| 中级用户 发帖 85 积分 305 | |
|
看来这个问题实在太菜了啊。但我实在想不出如何调用,大家帮帮忙吧
|
|
| 第12楼 youxi01 | 发表于 2006-12-08 00:19 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
你在for循环外面调用就没问题了:
echo %name1% %name2% %name3% 要么就在for循环里面: call echo %%name1%% %%name1%% %%name1%% |
|
| 第13楼 9527 | 发表于 2006-12-08 00:34 |
| 银牌会员 发帖 438 积分 1,185 来自 北京 | |
|
@echo off&setlocal
for /f "delims='' tokens=1,2" %%a in (test.txt) do set/a i+=1&call :pp "%%a" "%%b" echo %name1% %name2% %name3% echo %card1:~2% %card2:~2% %card3:~2% pause>nul :pp set name%i%=%~2 for /f "delims=: tokens=2" %%x in (%1) do set card%i%=%%x goto :eof |
|
| 第14楼 yardian | 发表于 2006-12-08 01:19 |
| 中级用户 发帖 85 积分 305 | |
|
感谢两位。两位好像理解我的意思。
由于我在顶楼给出示例导致这里a等于3,如果a不确定,那怎么知道name后面的数字究竟是多少呢?不知道我说的大家有没明白 |
|
| 第15楼 youxi01 | 发表于 2006-12-08 01:33 |
| 高级用户 发帖 247 积分 846 来自 湖南==》广东 | |
|
在9楼的代码不是有个%a%吗?这个就可以控制变量数目的啊!
所以,可以使用: 对应代码: 1、 2、 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |