| 
 
yardian 
中级用户
 
   
 
  
 
积分 305 
发帖 85 
注册 2005-5-23 
状态 离线
 | 
『楼 主』:
 如何控制从for语句中读取每个变量?
 
使用 LLM 解释/回答一下
  
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变量 
 
    
 
  
 |   
 | 
  2006-12-4 08:09 | 
  
 | 
 | 
 
a9319751 
中级用户
 
   
 
  
  
积分 439 
发帖 170 
注册 2006-1-9 
状态 离线
 | 
『第 2 楼』:
 
 
使用 LLM 解释/回答一下
  
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 ] 
 
    
 
  
 |   
 | 
  2006-12-4 08:19 | 
  
 | 
 | 
 
yardian 
中级用户
 
   
 
  
 
积分 305 
发帖 85 
注册 2005-5-23 
状态 离线
 | 
 | 
  2006-12-4 08:47 | 
  
 | 
 | 
 
lxmxn 
版主
 
        
 
  
 
积分 11386 
发帖 4938 
注册 2006-7-23 
状态 离线
 | 
『第 4 楼』:
 
 
使用 LLM 解释/回答一下
  
 
  楼主的dy是三方工具么? 
  可否上传一个? 
  要不生成临时文件,就要用这个工具进行测试啊,不然怎么测试? 
 
    
 
  
 |   
 | 
  2006-12-4 09:04 | 
  
 | 
 | 
 
yardian 
中级用户
 
   
 
  
 
积分 305 
发帖 85 
注册 2005-5-23 
状态 离线
 | 
『第 5 楼』:
 
 
使用 LLM 解释/回答一下
  
其实,我觉得只要能将读取的每一行内容赋给一个不同的变量(如:第一行赋给name1,第二行赋给name2,第三行赋给name3...)然后再从name1,name2...中提取所需内容就可以了.只是我想不到如何才能实现:将每一行内容赋给一个不同的变量.因为for语句是循环的,而且覆盖式的,后面会覆盖前面的值. 
 
 Last edited by yardian on 2006-12-4 at 10:07 AM ] 
 
    
 
  
 |   
 | 
  2006-12-4 09:27 | 
  
 | 
 | 
 
youxi01 
高级用户
 
    
 
  
 
积分 846 
发帖 247 
注册 2006-10-27 来自 湖南==》广东 
状态 离线
 | 
『第 6 楼』:
 
 
使用 LLM 解释/回答一下
  
看看这个是不是你要的: 
 
@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 
 
    
 
  
 |   
 | 
  2006-12-4 10:34 | 
  
 | 
 | 
 
seyeskcn 
新手上路
 
 
 
  
  
积分 12 
发帖 6 
注册 2006-12-4 来自 河南洛阳 
状态 离线
 | 
 | 
  2006-12-4 11:51 | 
  
 | 
 | 
 
yardian 
中级用户
 
   
 
  
 
积分 305 
发帖 85 
注册 2005-5-23 
状态 离线
 | 
『第 8 楼』:
 
 
使用 LLM 解释/回答一下
  
感谢,基本上是我所希望的效果!!!!!!!!!! 
唯一就是name变量不是引号内的内容 
 
 Last edited by yardian on 2006-12-4 at 12:16 PM ] 
 
    
 
  
 |   
 | 
  2006-12-4 11:52 | 
  
 | 
 | 
 
youxi01 
高级用户
 
    
 
  
 
积分 846 
发帖 247 
注册 2006-10-27 来自 湖南==》广东 
状态 离线
 | 
『第 9 楼』:
 
 
使用 LLM 解释/回答一下
  
呵呵,没看清LZ的要求: 
试试以下代码(稍微做了修改):
  
@echo off 
for /f "skip=4 delims=/:' tokens=2,4" %%i in (test.txt) 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  
  
 
    
 
  
 |   
 | 
  2006-12-5 01:01 | 
  
 | 
 | 
 
yardian 
中级用户
 
   
 
  
 
积分 305 
发帖 85 
注册 2005-5-23 
状态 离线
 | 
『第 10 楼』:
 
 
使用 LLM 解释/回答一下
  
谢谢!我后来也搞出来了。不过我发现你用set代替echo显示的确比较高,但是却给我的应用带来了麻烦。偶太菜,别介意啊! 
对于name和card的变量,我如何调用呢? 
我试了:%name%a%%,%name^%a^%%,%name\%A\%%,%(name%a%)%都不行啊? 
 
    
 
  
 |   
 | 
  2006-12-6 08:35 | 
  
 | 
 | 
 
yardian 
中级用户
 
   
 
  
 
积分 305 
发帖 85 
注册 2005-5-23 
状态 离线
 | 
 | 
  2006-12-8 00:08 | 
  
 | 
 | 
 
youxi01 
高级用户
 
    
 
  
 
积分 846 
发帖 247 
注册 2006-10-27 来自 湖南==》广东 
状态 离线
 | 
『第 12 楼』:
 
 
使用 LLM 解释/回答一下
  
你在for循环外面调用就没问题了: 
echo %name1% %name2% %name3% 
 
要么就在for循环里面: 
call echo %%name1%% %%name1%% %%name1%% 
 
    
 
  
 |   
 | 
  2006-12-8 00:19 | 
  
 | 
 | 
 
9527 
银牌会员
 
      努力做坏人
  
 
积分 1185 
发帖 438 
注册 2006-8-28 来自 北京 
状态 离线
 | 
『第 13 楼』:
 
 
使用 LLM 解释/回答一下
  
@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 
 
    
 
  
  |  
                  
  
                    我今后在论坛的目标就是做个超级坏人!!! |   
 | 
  2006-12-8 00:34 | 
  
 | 
 | 
 
yardian 
中级用户
 
   
 
  
 
积分 305 
发帖 85 
注册 2005-5-23 
状态 离线
 | 
『第 14 楼』:
 
 
使用 LLM 解释/回答一下
  
感谢两位。两位好像理解我的意思。 
由于我在顶楼给出示例导致这里a等于3,如果a不确定,那怎么知道name后面的数字究竟是多少呢?不知道我说的大家有没明白 
 
    
 
  
 |   
 | 
  2006-12-8 01:19 | 
  
 | 
 | 
 
youxi01 
高级用户
 
    
 
  
 
积分 846 
发帖 247 
注册 2006-10-27 来自 湖南==》广东 
状态 离线
 | 
『第 15 楼』:
 
 
使用 LLM 解释/回答一下
  
在9楼的代码不是有个%a%吗?这个就可以控制变量数目的啊! 
所以,可以使用: 
对应代码: 
1、
  
setlocal enabledelayedexpansion 
for /l %%i in (1 1 %a%) do  echo !name%%i! !card%%i! 
pause>nul 
 
2、  
for /l %%i in (1 1 %a%) do  call echo %%name%%i%% %%card%%i%% 
pause>nul 
  
 
    
 
  
 |   
 | 
  2006-12-8 01:33 | 
  
 |