楼 主
[请教]变量延迟的应用为什么失败
发表于 2006-06-27 22:38 · 中国 广东 珠海 电信
初级用户
★
积分 112 发帖 40 注册 2006-06-23 19:52 20年会员 UID 57473 性别 男
状态 离线
@echo off
echo.
echo.
echo 192.168.10.16上有以下最新的服务端供下载:
dir \\192.168.1.1\rel_inc(增量发布流)\svr /ON /A-D /B /-D /P >%zhx%\Temp\earlist.txt
setlocal ENABLEDELAYEDEXPANSION
set /a num=1
for /f "tokens=1 delims= " %%i in (%zhx%\Temp\earlist.txt) do (set file=%%i
set /a num+=1
echo ◇%num% %%i )
endlocal
echo.
pause
------------------------------------------------------------------
我想通过上述语句实现这样的显示结果:
◇1 a.txt
◇2 b.txt
◇3 c.txt
◇4 d.txt
但我实际执行结果却是:
◇1 a.txt
◇1 b.txt
◇1 c.txt
◇1 d.txt
也就是说明变量num没有延迟扩展,而是for语句预读时就赋予了1。
请高手帮忙改正。谢谢。
[ Last edited by zhaxi on 2006-6-27 at 22:41 ]
第 2 楼
发表于 2006-06-27 22:58 · 中国 广东 珠海 电信
初级用户
★
积分 112 发帖 40 注册 2006-06-23 19:52 20年会员 UID 57473 性别 男
状态 离线
晕。刚才查了半天。是不是由于我应该把%num%改成 !num! 啊。
哈哈。
第 3 楼
发表于 2006-06-28 08:54 · 中国 北京 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144 发帖 425 注册 2005-10-20 00:00 20年会员 UID 43784 来自 北京
状态 离线
@echo off
setlocal
for /f "delims=" %%a in (1.txt) do (
set /a aa+=1
call :hi %%a
)
endlocal
goto :eof
:hi
echo %aa% %*
goto :eof
有的时候也可以不用延迟环境变量来实现的..........
[ Last edited by bagpipe on 2006-6-28 at 11:17 ]
第 4 楼
发表于 2006-06-28 12:51 · 中国 广东 珠海 电信
初级用户
★
积分 112 发帖 40 注册 2006-06-23 19:52 20年会员 UID 57473 性别 男
状态 离线
还有这种做法啊。谢谢大哥了。通过一个call跳到for外面就可以实现aa的重新赋值了啊。
第 5 楼
发表于 2007-06-11 15:09 · 中国 云南 丽江 古城区 电信
初级用户
★★
积分 93 发帖 57 注册 2007-03-12 12:04 19年会员 UID 81503 性别 男
状态 离线
通过一个call跳到for外面后如何跳回for???
第 6 楼
发表于 2007-06-11 15:45 · 中国 湖北 武汉 武昌区 电信
中级用户
★★
scriptlover
积分 328 发帖 131 注册 2007-03-25 22:17 19年会员 UID 82910 性别 男
状态 离线
看3楼的代码,call本来就在for内。
scriptlover
Be with script forever!!
第 7 楼
发表于 2007-06-11 23:45 · 中国 广东 东莞 电信
初级用户
★
积分 107 发帖 48 注册 2006-11-30 12:06 19年会员 UID 72174 性别 男
状态 离线
Originally posted by ruisoft at 2007-6-11 03:09 PM:
通过一个call跳到for外面后如何跳回for???
goto :eof
她希望我把粪土变黄金,我希望她视黄金如粪土!
第 8 楼
发表于 2008-01-08 22:01 · 中国 江苏 南京 电信
新手上路
★
积分 10 发帖 4 注册 2008-01-08 18:43 18年会员 UID 108011 性别 男
状态 离线
this can be done as follows:
@echo off
echo.
echo.
echo.
setlocal ENABLEDELAYEDEXPANSION
set /a num=0
for /f "tokens=1 delims= " %%i in (1.txt) do (set file=%%i
set /a num= num-1
echo ◇!num! %%i.txt )
endlocal
echo.
pause
[ Last edited by wufengseu on 2008-1-8 at 10:02 PM ]
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正