中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-18 00:54
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教, 如何批量删除特定字符后的换行符? 查看 1,828 回复 18
楼 主 请教, 如何批量删除特定字符后的换行符? 发表于 2007-09-24 13:44 ·  中国 广东 汕头 澄海区 电信
初级用户
积分 20
发帖 9
注册 2007-09-24 13:04
UID 98184
性别 女
状态 离线
想批量处理单个文件下特定字符后的换行符, 文件比较长!
文件名: aaa.txt
格 式: 2007-9-12;
9,972.19
2007-9-13;
9,762.19
2007-9-14;
9,372.19

如何才能自动删除 ; 后的换行符? 完成后保存为另一份文件,如 bbb.txt

文件比较长, 一般超过6万行, 格式如上, 没有其它多余字符...
请大家指教!!
2 发表于 2007-09-24 14:12 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
UID 75624
性别 男
状态 离线
意思是把两行合并成一行吧?
3 发表于 2007-09-24 14:18 ·  中国 广东 汕头 澄海区 电信
初级用户
积分 20
发帖 9
注册 2007-09-24 13:04
UID 98184
性别 女
状态 离线
是的, 准确的说是隔行复制...
4 发表于 2007-09-24 14:21 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
UID 75624
性别 男
状态 离线
2007-9-12;
9,972.19
2007-9-13;
9,762.19
2007-9-14;
9,372.19

========================================
2007-9-12;9,972.19
2007-9-13; 9,762.19
2007-9-14; 9,372.19


改后是这样的格式吗?
5 发表于 2007-09-24 14:23 ·  中国 广东 汕头 澄海区 电信
初级用户
积分 20
发帖 9
注册 2007-09-24 13:04
UID 98184
性别 女
状态 离线
是的, 可以做到吗?
6 发表于 2007-09-24 14:29 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
UID 75624
性别 男
状态 离线
用sed

@echo off
sed "$!N;s/\n//" 2.txt
pause
7 发表于 2007-09-24 14:31 ·  中国 广东 汕头 澄海区 电信
初级用户
积分 20
发帖 9
注册 2007-09-24 13:04
UID 98184
性别 女
状态 离线
不好意思, 我完全是个新手, 可以用bat吗?
而且
Originally posted by wudixin96 at 2007-9-24 02:29 PM:
用sed

@echo off
sed "$!N;s/\n//" 2.txt
pause

好像没有指定文件名和路径??
8 发表于 2007-09-24 14:37 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
UID 75624
性别 男
状态 离线
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in ('findstr /n .* 2.txt') do (
set /a num=%%i%%2
if not !num!==0 (set str=%%j) else (echo !str!%%j)
)
pause


试试这个吧
9 发表于 2007-09-24 14:43 ·  中国 广东 汕头 澄海区 电信
初级用户
积分 20
发帖 9
注册 2007-09-24 13:04
UID 98184
性别 女
状态 离线
执行了, 可是没有看到保存的文件...

可以直接覆盖原文件吗?
10 发表于 2007-09-24 14:45 ·  中国 天津 电信
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
UID 75624
性别 男
状态 离线
只能先导出到临时文件,再删除原文件,然后改临时文件名为原文件名
11 发表于 2007-09-24 14:51 ·  中国 广东 汕头 澄海区 电信
初级用户
积分 20
发帖 9
注册 2007-09-24 13:04
UID 98184
性别 女
状态 离线
第二个写法应该是直接合并两行, 我还是希望只删除 ; 后的换行符, 然后覆盖原文件,这样文本增加新的内容 (格式同修改前)也不用重复执行...
12 发表于 2007-09-24 14:52 ·  中国 广东 汕头 澄海区 电信
初级用户
积分 20
发帖 9
注册 2007-09-24 13:04
UID 98184
性别 女
状态 离线
还是很多谢 wudixin96 !
13 发表于 2007-09-24 17:28 ·  中国 北京 广电网
初级用户
★★
积分 128
发帖 59
注册 2007-09-15 23:03
UID 97496
性别 男
状态 离线
Originally posted by wudixin96 at 2007-9-24 02:37 PM:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in ('findstr /n .* 2.txt') do (
set /a num=%%i%%2
if not !num!==0 (set str=%%j) else (echo !str!%%j ...

;)学习了
14 发表于 2007-09-24 19:55 ·  中国 北京 网联光通
初级用户
★★
积分 128
发帖 59
注册 2007-09-15 23:03
UID 97496
性别 男
状态 离线

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in ('findstr /n .* 2.txt') do (
set /a n=%%i%%2
set/a l=0
if not !n!==0 (
set str=!str!%%j
) else (
echo !str!%%j
set/a l=1
)
if !l!==1 set str=
)
pause


适用性好些,学习下
15 发表于 2007-09-24 20:10 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
UID 42345
状态 离线
发一个版主的学习
@echo off
set num=0
setlocal enabledelayedexpansion
for /f "delims=" %%i in (aaa.txt) do (
set /a num+=1
set str=!str! %%i
if !num! equ 2 echo!str! && set num=0 & set str=
)
pause
论坛跳转: