中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-05 18:37
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何在FOR语句提取数据时跳过空值? 查看 755 回复 2
楼 主 [求助]如何在FOR语句提取数据时跳过空值? 发表于 2007-09-13 17:27 ·  中国 湖南 长沙 电信
初级用户
★★
积分 103
发帖 52
注册 2007-04-13 05:20
19年会员
UID 84975
性别 男
状态 离线
for /f "tokens=1,2,3,4,5,6 delims=	" %%a in (测试.txt) do (
echo ^(%%a,%%b^)>>test.txt
echo ^(%%a,%%c^)>>test.txt
echo ^(%%a,%%d^)>>test.txt
echo ^(%%a,%%e^)>>test.txt
echo ^(%%a,%%f^)>>test.txt
)


如果在测试.txt中,每一行的数据可能有空的话怎么排除呢?
比如:

一	11	111	1111
二 22 222 2222 22222 222222
三 33 333
四 44


运行后得到结果为:
(一,11)
(一,111)
(一,1111)
(一,)
(一,)
(二,22)
(二,222)
(二,2222)
(二,22222)
(二,222222)
(三,33)
(三,333)
(三,)
(三,)
(三,)
(四,44)
(四,)
(四,)
(四,)
(四,)


我希望这里面为空的
如:
(三,)
(四,)

就直接不提取
如果不好实现的话,就把为空的替换没不存在
要怎么写呢?
谢谢大大们指点
2 发表于 2007-09-13 19:47 ·  中国 湖北 武汉 电信
中级用户
★★
积分 471
发帖 207
注册 2007-05-03 14:53
19年会员
UID 87369
性别 男
状态 离线
前面加上IF来判断再执行之后的命令。
3 发表于 2007-09-14 10:34 ·  中国 湖北 武汉 电信
中级用户
★★
积分 471
发帖 207
注册 2007-05-03 14:53
19年会员
UID 87369
性别 男
状态 离线
用Gawk也可以实现:

gawk "{for(i=2;i<=NF;i++)printf(\"(%s,%s)\n\",$1,$i)}" 测试.txt>2.txt


gawk.exe 的下载链接在论坛搜索一下就可以找到了。
论坛跳转: