中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-09 19:45
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 用for如何分离出带汉字列的文件中想要的列 查看 791 回复 8
楼 主 用for如何分离出带汉字列的文件中想要的列 发表于 2008-09-24 15:23 ·  中国 北京 科技网
初级用户
积分 27
发帖 12
注册 2008-08-22 17:48
17年会员
UID 123887
性别 男
状态 离线
有个1.txt文档,里面内容摘录一部分如下:

2 博 克 图 50632 48.77 121.92
3 海 拉 尔 50527 49.22 119.75
4 图 里 河 50434 50.45 121.70

现在我想把第三列,也就是50623那列分离出来,写入2。txt文档。

for语句如此:
for /f "tokens=3 delims= " %i in (1.txt) do >> 2.txt echo\%i

分离结果乱七八糟,细细看了语句,明显是汉字之间的空格干扰了delims的分离作用。

有没有什么好的办法能把这个问题解决?

[ Last edited by skystar65 on 2008-9-24 at 03:25 PM ]
2 发表于 2008-09-24 15:33 ·  美国 惠普HP
初级用户
积分 33
发帖 16
注册 2008-08-21 20:58
17年会员
UID 123805
性别 男
状态 离线
for /f "tokens=5 delims= " %i in (1.txt) do @>>2.txt echo\%i
3 发表于 2008-09-24 15:38 ·  中国 北京 科技网
初级用户
积分 27
发帖 12
注册 2008-08-22 17:48
17年会员
UID 123887
性别 男
状态 离线
Originally posted by Batcher at 2008-9-24 03:33 PM:
for /f "tokens=5 delims= " %i in (1.txt) do @>>2.txt echo\%i


这个代码还是不行,那几个例子只是我随时摘录的,实际上汉字行是地名,有三个字,也有四个字,示例如下:

6 齐齐哈尔 50745 47.38 123.92
7 海 伦 50756 47.43 126.97
8 富 锦 50788 47.23 131.98
9 佳 木 斯 50873 46.49 130.17
10 鸡 西 50978 45.28 130.95
11 哈 尔 滨 50953 45.75 126.77
12 牡 丹 江 54094 44.57 129.60
4 发表于 2008-09-24 15:48 ·  美国 惠普HP
初级用户
积分 33
发帖 16
注册 2008-08-21 20:58
17年会员
UID 123805
性别 男
状态 离线
@echo off
>2.txt type nul
for /f "tokens=1 delims=." %%a in (1.txt) do (
setlocal enabledelayedexpansion
set "str=%%a"
set "str=!str:~-15,5!"
>>2.txt echo\!str!
endlocal
)
5 发表于 2008-09-24 15:59 ·  中国 北京 科技网
初级用户
积分 27
发帖 12
注册 2008-08-22 17:48
17年会员
UID 123887
性别 男
状态 离线
Originally posted by Batcher at 2008-9-24 03:48 PM:
@echo off
>2.txt type nul
for /f "tokens=1 delims=." %%a in (1.txt) do (
setlocal enabledelayedexpansion
set "str=%%a"
set "str=!str:~-15,5!"
&g ...

哥们,还是不行:)
6 发表于 2008-09-24 16:03 ·  美国 惠普HP
初级用户
积分 33
发帖 16
注册 2008-08-21 20:58
17年会员
UID 123805
性别 男
状态 离线
哥们,咋个不行法?
C:\Test>type 1.txt
6 齐齐哈尔 50745 47.38 123.92
7 海 伦 50756 47.43 126.97
8 富 锦 50788 47.23 131.98
9 佳 木 斯 50873 46.49 130.17
10 鸡 西 50978 45.28 130.95
11 哈 尔 滨 50953 45.75 126.77
12 牡 丹 江 54094 44.57 129.60
C:\Test>type test.bat
@echo off
>2.txt type nul
for /f "tokens=1 delims=." %%a in (1.txt) do (
setlocal enabledelayedexpansion
set "str=%%a"
set "str=!str:~-15,5!"
>>2.txt echo\!str!
endlocal
)
C:\Test>test.bat

C:\Test>type 2.txt
50745
50756
50788
50873
50978
50953
54094
7 发表于 2008-09-24 16:14 ·  中国 北京 科技网
初级用户
积分 27
发帖 12
注册 2008-08-22 17:48
17年会员
UID 123887
性别 男
状态 离线
Originally posted by Batcher at 2008-9-24 04:03 PM:
哥们,咋个不行法?

兄弟,你的思路挺好的,倒数过来,把汉字掠过,可是我这边执行起来确实问题很多。

我把原文件1.txt传上来,你可以在你那边测试下。
附件
1.txt (5.67 KiB, 下载次数: 5)
8 发表于 2008-09-24 16:23 ·  美国 惠普HP
初级用户
积分 33
发帖 16
注册 2008-08-21 20:58
17年会员
UID 123805
性别 男
状态 离线
你的文本列之间是用制表符tab分割的
论坛程序会把制表符转换成8个空格
运行下面的代码之前请自行把delims=后面的8个空格改成1个制表符
@echo off
>2.txt type nul
for /f "tokens=3 delims= " %%a in (1.txt) do (
>>2.txt echo %%a
)
9 发表于 2008-09-24 16:42 ·  中国 北京 科技网
初级用户
积分 27
发帖 12
注册 2008-08-22 17:48
17年会员
UID 123887
性别 男
状态 离线
Originally posted by Batcher at 2008-9-24 04:23 PM:
你的文本列之间是用制表符tab分割的
论坛程序会把制表符转换成8个空格
运行下面的代码之前请自行把delims=后面的8个空格改成1个制表符
@echo o ... 

非常感谢!问题已经解决,我刚在ultraedit下面看了,列之间确实是拿制表符tab分割的,文档是朋友给的,没怎么细看,真没想到是tab符,这样以来问题确实很简单.
论坛跳转: