![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 15:54 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 关于FOR取值的一个疑问 |
| 可打印版本 875 / 11 |
| 第1楼 THENEWLIFE | 发表于 2009-04-04 10:06 |
| 初级用户 发帖 64 积分 78 | |
|
关于FOR取值的一个疑问 IPD这个变量是192.168.0.8
for %%a in (%ipd:.= %) do set IPD4=%%a 这句为什么会是把8提出来呢,因该是显示 192 168 0 8 才对啊 难道是因为IPD后面加了个4的原因所以才取第4位吗 个人感觉因该像这个例子样 for %a in (aa.txt bb.txt cc.txt) do @echo %a 输出 aa.txt bb.txt cc.txt 我又回去看了几遍关于FOR的介绍,还是不明白,还请大大详细说明下 |
|
| 第2楼 wjcing | 发表于 2009-04-04 16:43 |
| 初级用户 发帖 59 积分 71 | |
|
@echo off
setlocal enabledelayedexpansion set ipd=192.168.0.8 set /a _T=0 for %%a in (%ipd:.= %) do ( set /a _T+=1 set IPD!_T!=%%a ) echo !IPD1! !IPD2! !IPD3! !IPD4! ENDLOCAL pause |
|
| 第3楼 netbenton | 发表于 2009-04-04 20:25 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
因为for 的作用,后面的set ipd4=%%a执行了4次,前面的3次是临时的,
最后就得到了第4次的结果了。 |
|
| 第4楼 Pierre | 发表于 2009-04-04 22:40 |
| 初级用户 发帖 19 积分 30 | |
|
当set的时候,其实是进行了4次set,最后一次的值留了下来 |
|
| 第5楼 THENEWLIFE | 发表于 2009-04-04 23:52 |
| 初级用户 发帖 64 积分 78 | |
|
楼的方法是通过SET /A 递增的效果让我看的更清楚吧,
@echo off setlocal enabledelayedexpansion set ipd=192.168.0.8 set /a _T=0 for %%a in (%ipd:.= %) do ( set /a _T+=1 set IPD!_T!=%%a ) echo !IPD1! !IPD2! !IPD3! !IPD4! ENDLOCAL pause 它能一个一个显示出来是因为开启了变量延迟吗 |
|
| 第6楼 wjcing | 发表于 2009-04-05 01:03 |
| 初级用户 发帖 59 积分 71 | |
|
@echo off
setlocal enabledelayedexpansion set ipd=192.168.0.8 set /a _T=0 for %%a in (%ipd:.= %) do ( set /a _T+=1 set IPD!_T!=%%a call echo 变量延迟:%%IPD!_T!%% echo 变量未延迟:%_T% ) echo %IPD1% %IPD2% %IPD3% %IPD4% ENDLOCAL pause 不是...如果在for体内引用才用变量延迟.. |
|
| 第7楼 THENEWLIFE | 发表于 2009-04-05 12:25 |
| 初级用户 发帖 64 积分 78 | |
|
for %%a in (%ipd:.= %) do set IPD4=%%a
for %%a in (%ipd:.= %)如果不加后面的就因该会产生4个变量 %%a %%b %%c %%d 他们分别是%%a=192 %%b=168 %%c=0 %%d=8 所以你直接定义IPD4=%%a 就可以省略了这句“set /a _T+=1 set IPD!_T!=%%a 是吗 不知道我理解的对不对 |
|
| 第8楼 HAT | 发表于 2009-04-06 02:05 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 7楼 你理解的不对
在回头看看别人的回复吧 |
|
| 第9楼 balinger | 发表于 2009-04-06 03:23 |
| 中级用户 发帖 115 积分 356 | |
Originally posted by THENEWLIFE at 2009-4-5 12:25 PM: @echo off set ipd=192.168.0.8 for /f "usebackq tokens=1-4" %%a in ('%ipd:.= %') do ( echo %%a echo %%b echo %%c echo %%d) pause exit @echo off set ipd=192.168.0.8 for /f "tokens=1-4" %%a in ('echo %ipd:.= %') do ( echo %%a echo %%b echo %%c echo %%d) pause exit |
|
| 第10楼 THENEWLIFE | 发表于 2009-04-06 08:13 |
| 初级用户 发帖 64 积分 78 | |
Originally posted by netbenton at 2009-4-4 08:25 PM: 又回去看了几遍,是不是这个意思: 因为FOR每次都以一个变量来定义IPD4,比如第一次是用192.第二次就变成了168,所以就这样替换下去就变成了8 , 这样理解因该是对的吧 ![]() |
|
| 第11楼 balinger | 发表于 2009-04-06 09:14 |
| 中级用户 发帖 115 积分 356 | |
|
楼主理解对了
FOR循环执行do后(...)内的操作,循环几次,看in后( )内有几个可替换的参数 每次do操作,变量都取一个参数值 for %%a in (192 168 0 8) do (...) 表示有4个参数,默认以空格分割参数,变量%%a 第一次用第一个参数,赋值与变量,%%a=192 第二次用第二个参数,赋值与变量,%%a=168 ...... 当然,可替换参数的来源还有其它情形 |
|
| 第12楼 THENEWLIFE | 发表于 2009-04-06 09:18 |
| 初级用户 发帖 64 积分 78 | |
|
谢谢大家的指导
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |