中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 13:50
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问怎样有条件将空格替换成逗号 查看 1,395 回复 7
楼 主 请问怎样有条件将空格替换成逗号 发表于 2009-02-19 11:45 ·  中国 浙江 温州 龙湾区 电信
初级用户
★★
积分 58
发帖 60
注册 2009-02-18 12:48
17年会员
UID 139163
性别 男
状态 离线
文本 a.txt

C 123 456 78
123 56 我是谁 中国人
123 56 I am chinese
123 56 我是谁中国人

处理后结果:b.txt

C,123,456,78
123,56,我是谁 中国人
123,56,I am chinese
123,56,我是谁中国人

要求中文或英文部分中的空格不要替换成逗号,谢谢
2 发表于 2009-02-19 12:29 ·  中国 浙江 温州 龙湾区 电信
初级用户
★★
积分 58
发帖 60
注册 2009-02-18 12:48
17年会员
UID 139163
性别 男
状态 离线
小弟也是最近对批处理感兴趣,真是博大精深。奥妙无穷啊。set if for 等命令还是有点晕乎。正则表达式等那就更..,不过我正在学习ing~~~

上面这个问题困扰我很久了,对高手可能是小菜小碟。请帮一下忙吧。

[ Last edited by sady2009 on 2009-2-19 at 12:31 ]
3 发表于 2009-02-19 12:41 ·  中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
把替换的规则详细的说遍
我发现用FR 正则替换都是一个头疼的问题

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
4 发表于 2009-02-19 12:43 ·  中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
是不是每一行都由四个字符串组成:
11 22 33 44
像上面这种格式

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
5 发表于 2009-02-19 13:00 ·  中国 浙江 温州 龙湾区 电信
初级用户
★★
积分 58
发帖 60
注册 2009-02-18 12:48
17年会员
UID 139163
性别 男
状态 离线
谢谢楼上朋友关注!

可能我表达的是不是很清楚。详细再说一下,抱歉!

在A.txt 存在以下行的内容

C 123 456 78
123 56 我是谁 中国人
123 56 I am chinese
123 56 我是谁中国人
C 123 456 78
123 56 我是谁 中国人
123 56 I am chinese
123 56 我是谁中国人

内容是有规律可循的。包含c 开头和行, 和数字开头的行两种情况。

C 开头的行总共是四列,后三列是数字, 要求此行空格全部替换成","
数字开头的行要求将前两列的数字部分后边空格替换成"," ,之后的列是英文或中文也含有空格,这些空格保持不变,不要替换.

要求正确的结果如下:

处理后结果:b.txt

C,123,456,78
123,56,我是谁 中国人
123,56,I am chinese
123,56,我是谁中国人
处理后结果:b.txt
C,123,456,78
123,56,我是谁 中国人
123,56,I am chinese
123,56,我是谁中国人

请问批处理该怎么样写呢?


下面是我自己写的,不合要求,见笑了
for /f "tokens=1,2,3,4 delims= " %%i IN (a.txt) DO @if %%i==C (echo %%i,%%j,%%k,%%l >>b.txt) else @echo %%i,%%j,%%k >>b.txt

123 56 I am chinese 变成了 123,56,I 了, 我需要的结果是123,56,I am chinese.

请高手指点一二。谢谢

[ Last edited by sady2009 on 2009-2-19 at 13:32 ]
6 发表于 2009-02-19 13:48 ·  中国 广西 百色 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
@echo off
for /f "tokens=1,2,3,*" %%i in ('more +9^<%~fs0') do (
if /i "%%i"=="c" (
echo %%i,%%j,%%k,%%l
) else (
echo %%i,%%j,%%k %%l
)
)
pause&goto :eof
C 123 456 78
123 56 我是谁 中国人
123 56 I am chinese
123 56 我是谁中国人
C 123 456 78
123 56 我是谁 中国人
123 56 I am chinese
123 56 我是谁中国人
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
sady2009 +1 2009-02-19 13:59
7 发表于 2009-02-19 13:59 ·  中国 浙江 温州 龙湾区 电信
初级用户
★★
积分 58
发帖 60
注册 2009-02-18 12:48
17年会员
UID 139163
性别 男
状态 离线
谢谢,

可以解释一下吗? 或给个地址。
8 发表于 2009-10-22 21:01 ·  中国 江苏 南京 电信
初级用户
★★
积分 62
发帖 62
注册 2007-07-14 14:39
19年会员
UID 93962
性别 男
状态 离线
moniuming兄的确很强大。

也许是对fr的了解还不够深入,但就目前学习的感觉,fr的缺点就是环境必须很规则,如果环境不规则(例如字符的数量、顺序、各类、位置等一旦杂乱),局限性就很大
论坛跳转: