![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 07:57 |
共 48,040 主题排行 / 350,125 发帖 / 今日 1 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » for循环后为什么总是重复最后一行?(涉及跳出循环) |
| 可打印版本 969 / 4 |
| 第1楼 bd123456789 | 发表于 2008-01-20 17:02 |
| 中级用户 发帖 216 积分 360 | |
|
for循环后为什么总是重复最后一行?(涉及跳出循环) 批处理:A.BAT
setlocal enabledelayedexpansion for /f "delims=*" %%i in (源文件.txt) do ( set val=%%i call :ss ) :ss echo !val:~0,3!>>输出.txt goto:eof 源文件:源文件.txt 19 2 8 8 8.168 888.0888.1888 29 3 8 8 8.178 888.0888.1888 39 4 8 8 8.188 888.0888.1888 19 5 8 8 8.198 888.0888.1888 59 6 8 8 8.108 888.0888.1888 输出结果 19 29 39 19 59 59 问题 输出结果总是有6行(应该是5行),即最后一行总是重复的?为什么? 另外,如何解决? [ Last edited by bd123456789 on 2008-1-20 at 05:12 PM ] |
|
| 第2楼 logan0279 | 发表于 2008-01-20 18:07 |
| 初级用户 发帖 45 积分 100 | |
|
批处理:A.BAT
setlocal enabledelayedexpansion for /f "delims=*" %%i in (源文件.txt) do ( set val=%%i call :ss ) goto _end :ss echo !val:~0,3!>>输出.txt :_end 按你原来那个在FOR执行完了之后会继续执行下面的:SS这一段,自然会有两个59了! [ Last edited by logan0279 on 2008-1-20 at 06:09 PM ] |
|
| 第3楼 429499381 | 发表于 2008-01-20 18:39 |
| 中级用户 发帖 202 积分 452 | |
|
@echo off & setlocal enabledelayedexpansion
for /f "delims=*" %%i in (1.txt) do ( set val=%%i echo !val:~0,3!>>2.txt ) 这个比较简洁点, 你看看 |
|
| 第4楼 bd123456789 | 发表于 2008-01-21 09:03 |
| 中级用户 发帖 216 积分 360 | |
|
OK OK,二楼说的正确
想不到,标签段也会继续执行 三楼更简洁,测试一下,原来以为在FOR循环内无法在直接对变量提取子字符串 另外,为什么不能更简洁一点 → 会导致出错! @echo off & setlocal enabledelayedexpansion for /f "delims=*" %%i in (1.txt) do ( echo !%%i:~0,3!>>2.txt ) 即删除了赋值语句,直接将变量代入!!中呢? [ Last edited by bd123456789 on 2008-1-21 at 04:24 PM ] |
|
| 第5楼 hlighta | 发表于 2008-01-21 21:40 |
| 初级用户 发帖 12 积分 21 | |
|
不好意思,不明白!val:~0,3!是什么意思,怎么个用法?
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |