![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-25 08:00 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,274 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 文本"纵列"如何转换为"横行"? |
| 可打印版本 2,670 / 19 |
| 第16楼 xycoordinate | 发表于 2007-03-03 10:20 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
|
探讨2 str.bat
E:\>str.bat 111.txt 显示: str1=ncrlog\15600\20070111.txt:COM str2=MOBILE:13705553216 环境变量 str3 没有定义 str1=ncrlog\15600\20070111.txt:AMOUNT str2=100.00 环境变量 str3 没有定义 str1=ncrlog\15600\20070111.txt: str2=MTR str3=62232754000719668 str1=ncrlog\15600\20070111.txt: str2=15:04 str3=MTR "for /f "tokens=1,2,3 delims==, " %%i in (%1) do" for命令扫描111.txt的1行,赋值一次%%i, %%j, %%k, 结果正好与111new.txt显示顺序对应. 111new.txt
[ Last edited by xycoordinate on 2007-5-16 at 10:14 PM ] |
|
| 第17楼 xycoordinate | 发表于 2007-03-04 00:07 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
|
探讨3 test.bat
111.txt
E:\>testmiddle.bat 111.txt
探讨: for命令 扫描111.txt中的第1行时,test.bat中C部分符合条件,执行C,到END再返回START; 扫描111.txt中的第2行时,test.bat中D部分符合条件,执行D,到END再返回START; 扫描111.txt中的第3行时,test.bat中B部分符合条件,执行B,到END再返回START; 扫描111.txt中的第4行时,test.bat中A部分符合条件,执行A,到END再返回START. for命令是一行一行地扫描文本文件,for命令体(START到END之间)中的语句是按顺序执行. [ Last edited by xycoordinate on 2007-5-16 at 06:23 PM ] |
|
| 第18楼 xycoordinate | 发表于 2007-03-04 07:56 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
|
修改一点 增加对ACCEPTED的判断!
test2.bat
123.txt
test2.bat 123.txt
如果用test.bat执行 test.bat
test.bat 123.txt 结果:
如果,不做ACCEPTED条件的判断,没有ACCEPTED的将不显示!!! 特别地交易2(TELEPHONE)与交易3(WATER)的结果就不同! 而且如果将2,3位置颠倒,显示的结果就会不同!!! [ Last edited by xycoordinate on 2007-3-4 at 08:25 AM ] |
|
| 第19楼 minmin888 | 发表于 2007-05-07 21:34 |
| 初级用户 发帖 62 积分 127 | |
|
这样写不是更好理解吗!!!
@echo off setlocal enabledelayedexpansion echo DATE CARD AMOUNT for /f "tokens=1,2* delims== " %%i in (test.txt) do ( set var=%%j if "!var:~-3,1!"=="." ( set name=%%~ni set AMOUNT=%%j set flag=1 ) if !flag! equ 1 ( set CARD=%%k set CARD=!CARD:~0,19! set flag=2 ) if !flag! equ 2 ( echo !name! !CARD! !AMOUNT! set flag= ) ) pause |
|
| 第20楼 xycoordinate | 发表于 2007-05-16 20:16 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
|
19楼,讲得对"上面的写法理解是不大好",不过只是简单地改变上下顺序是不行的!需要修改内容!
而且是"namejm"斑竹帮忙想出来,我就只好尊重他的写法了! test.txt ncrlog\15600\20070111.txt:COM MOBILE:13705553216 ncrlog\15600\20070111.txt:AMOUNT=100.00 ncrlog\15600\20070111.txt: MTR 62232754000719668 ncrlog\15600\20070111.txt: 15:04 MTR ACCEPTED 执行你的bat,得到的是: DATE CARD AMOUNT 20070111 100.00 for扫描test.txt,第1行不满足,pass! 只有test.txt第2行中, ncrlog\15600\20070111.txt:AMOUNT=100.00 满足for命令中条件, if "!var:~-3,1!"=="." ( set name=%%~ni set AMOUNT=%%j set flag=1 ) for命令顺序执行下面的行,显示出来, 但是,for继续扫描第3,4行,不满足条件,所以,不能取到!CARD!的值! 修改19楼的bat文件 test.bat
执行 test.bat test.txt 得到: DATE CUSTOM_NO CARD AMOUNT 20070111 13705553216 62232754000719668 100.00 请按任意键继续. . . [ Last edited by xycoordinate on 2007-5-16 at 10:40 PM ] |
|
| 上一页 1 2 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |